追寻完美:数据库SQL优化极致 之 关心隐藏的部分

张中靖 云和恩墨技术专家,软件研发总监

我们先来听一个【老木匠和小木匠的故事】

同样做柜子,老木匠做的是两面光,柜子内外摸起来一样光滑、不扎手;而小木匠做的,大多是外面光滑,里面不能细看。

乔布斯可以算是一位老木匠了,他一生中追求的完美主义,淋漓尽致地表现在了苹果的一系列产品中。《史蒂夫·乔布斯传》有这样的描述:

乔布斯从父亲身上学到,充满激情的工艺就是要确保即使是隐藏的部分也被做得很漂亮。这种理念最极端也是最有说服力的例子之一,就是乔布斯会仔细检查电路板,电路板上是芯片和其他部件,深藏于麦金塔的内部,没有哪个用户会看到它,但乔布斯还是会从美学角度对它进行评判。“哪个部分做得很漂亮,”他说,“但是,看看这些存储芯片。真难看。这些线靠的太近了。”

一名新手工程师打断他说这有什么关系,“只要机器能运行起来就行,没人会去看电路板的”。

乔布斯的反应和往常一样:“我想要它尽可能好看一点,就算他是在机箱里面的。优秀木匠不会用劣质模板去做柜子的背板,即使没人会看到。”几年之后,在麦金塔电脑上市后的一次访谈中,乔布斯再一次提到了当年父亲对他的教导:“如果你是个木匠,你要做一个漂亮的衣柜,你不会用胶合板做背板,虽然这一块是靠着墙的,没人会看见。你自己知道它就在那儿,所以你会用一块漂亮的木头去做背板。如果你晚上想睡得安稳的话,就要保证外观和质量都足够好。”

乔布斯的“关心隐藏部分”理念让他把细节做到了极致,这是苹果产品能够做到今天成就的一个重要因素。同样,这个道理也适用于我们做SQL优化的时候。一些技术人员谈论到用profile优化SQL,效果是如何如何的好。做Oracle优化时,不少人习惯用Hint、Outline、Profile等固定执行计划来优化SQL,效果几乎是立杆见影。殊不知这是将SQL性能与SQL文本建立了强关联,并没有根本解决问题。一旦SQL写法发生变化(或者未使用hint的SQL出现),优化手段失效的可能性很大,性能问题将再次出现。

这种优化方式的问题在于仅限于解决现场问题(类似于急诊),而停止去思考SQL选择较差执行计划的原因。Oracle一直不停的改进CBO算法,就是为了让SQL书写方式跟性能解耦,让开发人员尽可能只关注实现业务逻辑。当Oracle为SQL选择了性能较差的执行计划,在使用profile甚至hint固定临时解决问题后,DBA还要思考下为啥选择了差的执行计划?差的执行计划和较优的执行计划有哪些差别?这些差别是什么导致的?能否修复?只有理解了执行计划的产生原理才能从根本上解决问题,也就是老木匠和小木匠的差别。

本文引用内容来源:《史蒂夫·乔布斯传》第十二章:设计 。本文题图来自网络。

我们一直在关注SQL的性能,并为此在研发SQL性能诊断分析产品,如果你是一个完美主义者,并对此深藏爱好,请给我们发送简历。

原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2016-04-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

扫码关注云+社区