前言 迈出崭新一步——本书特点及存在意义
0.1 当今时代,既是最好的也是最坏的
近年来,我深刻地体会到,如今这个时代对于绝大部分技术人员而言是幸福的时代,能在这个时代从事IT技术相关工作的技术人员应该很开心。因为比起老一辈技术人员,现今的技术人员几乎从来就不缺资料。除了可以在各技术平台的官方网站下载到详尽且准确的学习资料,他们还可以很容易地在Google、百度上搜索到自己想要的答案,也可以很方便地在各种技术论坛上注册提问从而获取别人的帮助,其中最著名的就是ITPUB论坛,我本人也从中受益匪浅。
然而,这个时代对技术人员来说也是痛苦的时代。无论是传统的电信、金融、证券行业,还是新兴的互联网行业,我们都不难发现运维系统涉及的数据量、访问量及并发量都在以惊人的速度不断激增。重压之下,很多IT系统运行举步维艰,技术人员压力巨大,甚是痛苦。除了负载压力外,系统的复杂度也随着业务复杂度的增加而成指数级增加,让开发设计人员头昏脑胀,让故障诊断及系统维护的相关技术人员无从下手。
痛苦还不止于此,在这个时代,除了海量负载和高复杂度,还有让技术人员应接不暇而无所适从的各种新技术。且不讨论 IT 所有技术,仅以数据库为例,除了以 Oracle、DB2 等为代表的一系列传统关系型数据库外,还有内存数据库、列式数据库、以HBase为代表的分布式数据库等等,让人眼花缭乱。此外,除了各类纷繁技术的选型外,我们还要适应具体各个版本的不断更新,以Oracle数据库为例,从早期的Oracle 5版本到今天即将正式发布的Oracle 12c,Oracle每一次新版本发布都需要我们去学习和适应,投入大量的精力和时间。
这是幸福的时代,也是痛苦的时代。这是最好的时代,也是最坏的时代(如图0-1所示)。
图0-1 当今时代
0.2 技术人员,真正差距其实在意识
在这个特点鲜明的时代,我目睹了一大批在IT项目中不能有效适应这个时代而导致摔得鼻青脸肿,碰得一鼻子灰的技术人员,而这些人之中大多还是勤奋上进之人,少数还是技术能手。当然,也有成功的例子,让我来说说他们的故事吧。
0.2.1 小白的故事
工作两年多的小白是一个很努力的员工,每天除了用心工作外,还坚持充电学习,两年来他除了把Oracle 10g和Oracle 11g的官方文档几乎读了个遍,还购买了不少相关的书籍来学习。由于小白的项目组工作强度大,时常需要加班,因此小白工作学习外的时间就只够吃饭和睡觉了。那他的工作表现很出色吗,天道是否一定酬勤?实际情况却是不尽如人意,虽然他了解很多相关知识,可是在实际工作应用中却不得要领,频频出错,领导经常对其提出批评,他自己也相当苦恼。
其实小白只是因为缺少了一种称之为“意识”的东西,这个意识就是,该如何学习。在他的学习过程中,他犯了很多错误。
1. 忽略了知识的重点
小白读完了Oracle官方文档的几乎所有内容,毅力让人钦佩!遗憾的是,他忽略了二八现象这个事实:20%的知识,解决80%的问题。小白根本不需要读完Oracle所有文档,他所在的项目组是从事数据库开发相关工作,而他却花费了大量的时间阅读完了至今他都尚未开始从事的数据库管理相关知识,比如备份恢复、RAC、DATAGUARD部署及高级数据同步复制相关的技术,这是完全没有必要的。
另外语法方面的资料小白也根本无须细读、记忆,因为平时用得多的语法,自然记得住,遇到偶尔忘记的场合再去官方文档翻阅即可,现在Google等搜索引擎也非常强大,搜索到相关语法易如反掌。
人的精力是有限的,如果我们做到当前做什么事对应学习什么知识,尽量理解原理而不强记语法,将能省下多少宝贵的时间啊。
2. 从未考虑知识落地
小白曾经对我说过自己的烦恼,向我说明了他有多努力,看过了多少资料。我试探性地问他是否知道Oracle的体系架构是什么?他很自信地做了回答,滔滔不绝,甚至还画了草图给我,回答得让人相当满意。我又问他是否知道索引的结构和原理是什么?再次得到完美的答复。
接下来我再问他,知道这个体系架构对我们工作有啥帮助呢?他一下子回答不上来了。我继续问他,那索引的结构和原理对我们工作中的数据库应用有啥好处呢?再次答不上来。
原来这就是问题的关键所在!
知识要落地,要思考应用的场合,这就是我除了要让他把握学习重点外的第二个建议。他的学习其实就是为了学习而学习,没有思考应用场景的学习,是没有任何意义的。
后来我建议小白来听我在公司开讲的Oracle系列讲座,让他明白原来了解体系结构后我们居然可以将一条SQL从42秒调整到不足0.01秒;了解索引结构后,我们居然可以优化我们身边最为常见的SQL语句,比如COUNT(*)、MAX()等。而在此之前,这些语句根本不会让他对索引产生联想。他终于彻底明白了什么叫知识落地,明白了意识有多么重要!
我最后强调,不只是Oracle,其实学习任何技术都是一样的,没有思考过你所学的某项技术有什么用,没有想过如何落地,如何应用到实际工作中去,都是毫无意义的学习,纯粹浪费生命。
3. 选择技术使用场景
近来小白连续犯错,他学习了并行度这个章节后,知道并行可以有效地利用多个CPU,就将自己的代码加入了并行度。但他忽略了生产系统不只运行他这一个应用这个事实,结果导致代码上生产后系统资源大量争用。直至最后我们定位到问题在他的代码中,将写法修正,取消了并行度后,系统终于恢复正常。
他为什么会犯这个错误?主要是因为他只专注于技术本身而忽略了应用的场景,如果是凌晨2 点的某个大任务操作,他的这个设置就很好,因为那个时刻大多其他应用都已经停止运行了,资源不用白不用。
这就是什么时候选择什么技术。小白还有一个有趣的故事,就是在我给他提这第三个建议之后的一周,他又使用了并行,这次他不是在代码中写死,而是选择临时性场合使用,在凌晨2点运行系列特定脚本。结果这次运行的比想象的慢得多,还不如之前未用并行的时候。
大家知道是什么原因吗?其实还是因为不知道什么时候选择什么技术。这次他不会影响他人了,因为凌晨静悄悄。但是他影响了自己。因为他的任务的特点是小而多,平均不到0.01秒可以完成一条SQL执行。他忽略了另外一个细节,并行是需要调度的,调度是需要开销的,调度的开销甚至达到0.1秒,那当然是越跑越慢了。所以小任务实际上是不需要考虑并行的。
类似的故事还有很多,在本书中大家还会接触到什么时候选择什么技术的各类场景,这里暂且只说并行。
小白的故事说完了,其实要是早些年,他或许不会有这些苦恼,因为学习资料少,他即便不抓重点也不至于学到筋疲力尽;此外他的诸多失误都和性能有关,而早些年大多IT系统压力很小,在基本功能满足后性能问题几乎可以忽略不计,那小白也就没错可犯了。
再次强调,当今的IT建设项目,如果不对海量数据和高并发带来的性能问题进行有效的架构设计、部署规划,你的项目基本上就被判了死刑。而Oracle新版本为什么对应大量技术文档,很大一部分原因是Oracle新版本提供了更多的性能调优产品。为什么现在新技术如此繁多,其实也是源于此,难道内存数据库和列式数据及分布式数据库的产生,不是为了让系统跑的更快一些吗?只是这里要注意,它们不可能替代传统关系型数据库,因为它们都有各自适合的应用场合。小白的故事如图0-2所示。
图0-2 小白的故事
0.2.2 小刘的故事
1. 该如何请教他人
工作近5年的小刘特别勤学好问,工作中一遇到不明白的技术问题就问,有时问周围的同事,有时发帖子在论坛上提问。可是最近他非常郁闷,因为总是没人愿意回答他。是不是大家不够团结友爱?非也!问题出在他自己身上,你们知道为什么吗?
让我们来看看他是怎么问的吧。
“请问,对表的某列建索引如何建?”
“请问,分区表中删除分区后,索引会不会失效?”
“哦,您说我问过同样的问题了,我怎么记不起来了?”
前两个提问有问题吗?不少人都觉得应该一点问题都没有,其实是很有问题的。因为很显然第一个问题可以Google搜索到,而第二个问题除了Google可以搜索外,你完全可以通过做一个试验来得出结论。
网上可以很方便搜索到的东西去问别人无异于浪费别人的时间,当今这个时代,搜索能力成为了最重要的能力之一。知道关键字的比不知道关键字的搜索能力更强;英文好的比英文糟糕的搜索能力更强。为什么不去锻炼提升自己这方面的能力呢?显然可以动手试验证明结论而不去试验,会让你白白失去了一个宝贵的试验和总结的机会。
第三句对话暗示该同学经常问同样的问题却不自知,这说明了什么?别人告诉你答案时,你思考过吗,记录过吗,总结过吗?
2. 问题该怎样描述
某次我在外地出差,下飞机后打开电脑,收到了小刘的一封求救邮件,内容是这样写的:今天早上上班发现宁夏的数据库很慢,请帮忙诊断分析一下,万分感谢!
之前我还收过小刘的另外一封求救邮件,内容是这样写的:紧急求救,湖北数据库崩了,请尽快帮忙处理,谢谢!
从这两封邮件可以看出来,求救者严重缺乏经验,在沟通上存在着巨大的问题,你们知道是什么问题吗?
先说这个慢的邮件,是某个局部慢还是整个系统都很慢,不同情况的处理方式截然不同。是今天开始忽然变慢还是一直以来都慢,直至今天再也无法忍受,不同情况的处理方式显然是截然不同的。再说这个慢字,有一次我对求助者说,这个语句1秒就出来了,你怎么会觉得慢得受不了了?他的回答是,原先只需要0.1秒左右,这语句一天可是会跑上千万次啊。哦,原来1秒也让人觉得超级慢。还有一次有个求助者对我说,这个语句现在要跑2个多小时啊,原先超级快,只需要5分钟左右。哦,原来5分钟也有人觉得超级快。因此,你准确地告诉我现在要执行多长时间,希望执行多长时间,不是很准确吗?
再看第二封邮件,崩了?什么叫崩了,是数据库忽然关闭无法启动,还是系统运行太缓慢,还是数据文件丢失?哦,我来公布答案吧,后来知道这个崩了原来是指系统资源负载太高,系统运行缓慢。原来这就是崩了,为什么要说这么模糊的字眼呢?
还有,这两封邮件都有个共同的特点,就是既没有提供接口人的联系电话,也没有提供所需要处理的机器的IP地址、登录用户名和密码。
毫无疑问,接下来我要再确认好多次,才能最终帮上他。
3. 失误不只是粗心
小刘最近非常苦恼,因为近期系统经常遇到并行相关的等待事件,导致系统运行缓慢,后来查出来是诸多表和索引都有默认的并行度,这是因为系统很多大表通过并行的方式完成了创建,小刘创建完毕后忘记将并行度取消了。因为此事影响了生产系统正常运行,小刘被领导批评了,他也承认了自己过于粗心的毛病。
其实我们仔细分析就知道,这种问题绝对不只是因为粗心。显然有个更重要、更本质的东西没有揪出来,这就是流程和规范。
如果小刘在操作前事先准备好操作步骤,而不是即兴发挥现场操作,取消并行度的步骤应该就不会忘记。
即便他忘记了这个步骤,连脚本都没有体现,也没有关系。如果有规范,要求生产的操作准备了脚本,并且必须要他人审核通过方可操作,那也就不会出错了。
即便审核的人也犯错了,如果有个完善的流程,在生产中完成操作后必须检查哪些项目,那这个例行检查也必然会让错误再次避免。
人不是机器,都会失误,即便有的人素质非常高,不容易犯错,你也不能指望所有的人都这样,因此流程和规范才是最重要的。本书中大家会发现我们都有哪些流程和规范是来避免误操作的。小刘的故事如图0-3所示。
图0-3 小刘的故事
0.2.3 自己的故事
1. 湖北神秘调优之旅
某日湖北某工程点向我求救,需要优化他们的生产系统,瓶颈正出在数据库上,为此公司让我去湖北现场进行调优。去之前我心中很没有底,因为据说这个性能问题已经困扰该工程点半年多了,期间该工程点已经请过好几波人马来调优过了,而且请来的人员中还不乏精通数据库的知名高手,这么多人这么长时间都无法把系统性能提升,我可以吗?
结果呢,我赶赴湖北现场忙碌一周后,该工程点生产系统性能最终得以大幅度提升,该工程点兴奋之余还发了一封表扬信到我公司,以此来肯定我的贡献。事后不少同事问我为什么那么多人长时间没解决的问题,而你一个人一周就搞定了,用了什么Oracle的高深技巧搞定这事。实际情况是,我并没有用任何Oracle技巧,甚至我根本就没有利用到和数据库有关的任何知识,但是我却解决了性能问题,圆满完成了任务。这是千真万确的事。
我到底做了什么事,让我来公布一下答案吧。我到了湖北,和现场技术支持人员以及相关人员对当前业务深入交流了一周,精简改写了大量逻辑被人为复杂化的 SQL,删除了部分多余的SQL,对大表的保留记录情况根据业务特点进行了合理的规划,让不少大表变成了小表。
然后呢,然后就没有然后了,系统运行飞快,我胜利归来。这是一个很简单的道理,原先不少难以优化的运行缓慢的语句被我直接给咔嚓掉,从系统中消失了,此外不少大表变成了小表,系统变快不是自然而然的事情吗?
2. 三句话恢复的故障
某日早上 10 点,我接到项目组的紧急求救电话,被告知当天早上 8 点,某平台的生产系统运行极其缓慢,已经有相关人员在现场进行调查分析了,可惜两个小时过去了,直至现在依然没有解决问题,客户投诉不断,情况非常紧急。恰逢我在外地出差,且不说我在外地有重要事情要处理,即便是立即飞回来也需要一天的时间,该如何解决这个问题呢?
结果呢?10分钟后,在我的帮助下,问题解决了,故障恢复了。我做了什么事,这么神奇?其实,我只在电话里和求助者交流了短短的三句话,求助者心领神会而去,然后问题就解决了。我是让他们调整什么神秘的参数吗?不!其实我用的方法和数据库的知识一点关系都没有,他们要是早点给我打电话就好了,免得相关技术人员折腾了两个小时,却无法消除故障,实际上这个技术人员的水平并不低,甚至可以说是Oracle方面的行家。
到底是哪三句话这么神奇呢?
“系统是从什么时候开始慢的,是一直就慢还是突然变慢?”回答是今早上班忽然感觉缓慢,昨天下班以前都是正常的。
“那昨天你做了什么吗?”回答是昨天晚上升级了补丁。
“补丁允许回退吗,如果允许,你就回退补丁吧。”回答是系统都不能用了,如果回退可以解决问题,当然可以回退。
接下来十分钟后,电话告知我,回退后系统正常了,问题解决了。
现在不影响生产系统的应用了,剩下来的事情就是开发人员自己慢慢去检查代码有什么问题,最终问题在于代码有死循环和笛卡儿积,后续更改后投放生产就没问题了。
这其实就是生活,好比你去医院看病,肚子疼医生肯定会问你从什么时候开始疼,如果就是今天早上疼,那接下来必定会问你昨天晚上吃了什么……
3. 数据迁移有那么难吗
某日,某生产环境要做数据迁移,方法是通过 EXPDP 的方式将旧环境的数据库导出,然后通过IMPDP的方式导入到新环境,要求在凌晨2点开始导出,6点前完成导入,因为之后需要测试,必须保证上班时间8点后,新系统可以正常运行。
这里涉及的技能是掌握Oracle的EXPDP/IMPDP命令,如果今天让我来上课描述这个工具的使用,大致 45 分钟时间可以完成课程的讲述,还包含了动手试验的时间。因此这显然不是一件很复杂的工作,当时现场的操作人员是一位工作多年的,拥有OCM证书的技术人员,大家也都觉得很放心。
然而实际情况是,从凌晨2点开始操作,直至下午6点,才完成了导入工作,整整比预计推迟了12个小时!这期间虽然临时做了不少应急补救措施,但是还是严重影响了生产的正常运营。
为什么会这么糟,中间出了什么问题?其实这里的故事太耐人寻味了,需要改进考虑的细节也太多太多了。
接下来揭晓谜底吧,还是通过一段对话展开。
“请问你要导出的库有多大?”答曰不知道。
“请问你要导出的库最大的对象有多大,能否列举前20名的大对象?” 答曰没统计。
“请问是否是所有的对象都需要导出?”答曰应该是,没确认。
“请问你知道导出和导入机器的CPU、内存配置情况吗?” 答曰没注意。
OK,这就是原因了,让我来告诉大家我调查的结果吧,全库有 1TB 这么大,其中某记录操作日志的表T1就达到400GB,连同索引,大小合计500GB左右,近乎一半的量。而和业务人员确认的结果是,T1表可以暂且不导出,只需在新环境中建表结构即可。前20名的大对象除了巨无霸T1表外,还有不少也很庞大,其中有一张单表即有120GB,只需保留最近三个月即可……经过我的确认,1T的数据最终只需要导出300GB左右。
接下来的调查还发现了更加惊人之处,导出和导入的机器CPU个数居然都达到64个,强劲得让人惊叹!而我观察操作的脚本,也有写并行度,只是随便写了PARALLEL=8。当时是凌晨,我们完全可以将导出导入的PARALLEL设置为更大,比如60个都不为过,这里又将会有5倍以上的提速。
后面我告诉他们,其实这次导出导入只需要合计2小时就足够了,不需要4小时,更不会操作了整整16个小时!
4. 充分准备是要领
某次我应邀去安徽某工程点进行数据库调优,周二晚上接到通知,要求周三下班前赶到现场,周四一天之内要把系统性能显著提升,从而应对周五集团组巡的检查工作,当时公司领导也在现场,情况相当紧急。
这是相当让人头疼的一件事,因为系统调优是一项相对复杂和艰巨的任务,要求在一天时间内立竿见影,可能性很小。虽说没有把握,但是也只好硬着头皮去试试看,我在出发前做了充足的准备,这些准备方法大多来自平时的积累,这种积累非常宝贵非常重要。有了这些重要的准备,我在出发前通过工程点现场同事的配合,获取了大量我想了解的重要信息,在路上和飞机上做了充分的分析和研究,等下午6点到工程点现场,我已经对这里的情况了如指掌了。
然后,晚上调优到凌晨 2 点,第二天再奋战一天,第三天,系统终于运行平稳了,IDLE 从原先的0~1%变为40%~50%,系统性能显著提升了。
这个小故事说明了一个道理,积极的准备是很重要的,我准备了一个非常详细的处理及定位问题的流程和思路,从动态到静态,从整体到局部,非常详尽和实用,将会在后续分享给大家。读者可以从中体会到我是如何解决定位以及分析探索问题的,此外还可以学习到我所总结的优化思想和方法论。我自己的故事如图0-4所示。
图0-4 自己的故事
0.2.4 故事的总结
至此我讲完了小白、小刘和我自己的故事。别小看这三个人的故事,其实是非常典型的,这其中小白的故事告诉了我们学习是很有技巧的,是一门技术活。而小刘的故事告诉我们如何提问、求助以及制定规范是非常重要的。最后我本人的故事告诉大家,很多时候,解决问题不一定完全依靠技术本身,我的4个故事中的制胜法宝全部是非技术,这说明技术虽然重要,但是不能仅仅依赖技术。技术人员的故事如图0-5所示。
图0-5 技术人员的故事
0.3 收获Oracle,更收获“少做事”
包括我在内的几位技术人员的故事表面上说明的重点各不相同,实际上有一点上是相同的,那就是一个非常重要的意识:准确地把握需求,尽可能少做事! 不要小看了这句话,这是永不过时的一句话,生活难道不是如此么?
精简起来可以用三个字概括:少做事。
就只是少做事?
别惊讶,让我们一起分析一下。
小白是一位数据库开发人员,数据库开发就是他的工作职责,很显然他的学习任务就是了解数据库开发相关知识。他这时就应该选择性地学习,尽量抛弃和工作任务无关的知识,例如数据库的迁移备份部署等相关知识与他工作无关,就暂且不学,这就是少做事。
暂时在工作中应用不到的内容先不学,何乐而不为?接下来我们还要保证精简学习的内容,要掌握得最快,别拖拖拉拉地学了三五年,不符合这个时代的要求。这时最大的技巧就是将学习和工作结合在一起,带着知识点该如何落地应用以及什么时候该选择什么技术的想法去学习,这样目的性极强的探索性质的学习,往往学习一遍就够了,那些为了学习而学习的传统方法,学了多遍往往也无法有效地应用到工作中去。这又是少做事。
小刘为了能更好地提升自己的技术水平,经常请教他人,希望快速获取别人的帮助,节省时间,本质是想少做事,这个出发点是对的。但是他问的问题是很方便可以搜到的,这样的提问对被提问者来说,就是让被提问者多做无意义的事,浪费生命,所以能搜索到的问题尽量不要去请教他人。同样道理,问过的问题也尽量不要再问。此外自己动手做试验来证明结论,这事表面上看不如直接问或者查资料来得快,不过试验可以让你在动手动脑的锻炼中加深印象从而过目不忘,和那些由于从不动手进行试验而导致学习过于浮躁、停留表面,最终反复学习多次都无法很好掌握相关知识的人相比,显然也是少做事了。
小刘的两封邮件表达得过于糟糕,导致我一头雾水无从下手,最终必然要再次联系反复交流。为什么不养成好的习惯,一次性说清楚,让大家都快速投入到故障处理工作中去?这也是少做事。
接下来说小刘的工作失误,文档规范、评审等看似是多做事了,其实也是典型的少做事,因为公司、部门的工作大多都有通用性,有了这些准备资料,交接的工作者可以直接拿来使用,既准确又省心,就是少做事。
最后点评自己的故事了。湖北之行是一次精简程序和瘦身表的旅程,显然是一次少做事的经典之旅,三句话解决故障显然是一次最精简的故障定位案例。接下来说数据迁移案例,从1TB到300GB导出,是否很有技术含量,可以说没有,也可以说有。说没有是因为这真的没什么技术可言,说有是因为有意识的人比起没意识的人,差别是非常大的。最后说说安徽之行我准备的文档和脚本,且不说提前准备后让我一到现场就开始解决问题,少做了定位问题的事(提前在路上完成了),节省了宝贵的时间,就说这份文档和脚本的分享,足以让后人少做不少事,节省不少时间。
点评完三个技术人员的故事,我的书要怎么写呢?前面说了这么久,其实主要在谈如何少做事的意识,现在这本书的主基调就明确下来了,就是主要和大家分享如何少做事解决问题的思路和方法。
分享这个主题首先要选择一个场景或者道具来和大家讲述,选择什么道具呢?考虑到现在IT行业中开发、设计、测试、维护等几乎所有IT相关技术员,或多或少都需要接触到关系型数据库,而Oracle又在当前关系型数据库的市场份额中遥遥领先,因此学习Oracle会让绝大多数人更容易找到合适的工作,从而在就业上多一些选择,少一些奔波。于是本着尽量少做事的原则,我们的道具确定是Oracle。
围绕着Oracle课程我们将会惊奇地发现,其实Oracle技术的本身细节中,四处渗透着少做事的思想,从体系结构到物理结构,从表到索引的设计,无一例外。例如SQL执行第二次就会比第一次更快,显然是因为第一次执行保存了共享池的解析动作,CACHE 了磁盘中的数据,第二次无须再解析,无须再去物理磁盘读取数据,从而提升了性能,这就是少做事。又如索引的体积一般比表小得多,如果能只访问索引完成需求一定比在表中更快,这也是少做事。再比如分区表,如果没有设置分区表,则需要全表扫描,如果设置了,或许只需要在某个分区中查找即可,访问的路径少多了,这也是少做事……这些例子不胜枚举,多得可以写成一本书。哦,不对,就是可以写成一本书,这本书不就主要写这个吗?
本书不会将Oracle的所有知识都描述完,其中只涉及体系结构和物理结构,表、索引与表连接这几个章节,虽然涉及的内容不多,但是却是非常核心和重要的,所有不同角色的人员都离不开这几个章节的学习,这是共性的部分,只有把这几个章节学好了,后面的学习才有意义,这是为了避免大家像小白一样一头雾水地漫无目的地学习,少做和自己任务无关的事。另外最重要的是我讲述的学习的路线图和思路以及方法,这就是少做事的体现。
此外我特别强调知识的落地,探讨最多的话题就是,学习这些知识有什么用,和不知道这些知识的人相比,在工作中有什么差别,从而保证大家不浪费时间。在这些章节中,大家将会和我一起体会,原来理解体系结构后,我们可以把一条常见的SQL从原先的42秒完成提升到0.01秒左右完成,实现了一次从单车到飞船的飞跃;原来理解了索引后,立即就可以着手优化身边最常见的SQL语句。
接下来书中有另外一个重点部分,就是我的方法论、工作习惯、实用的准备工作脚本以及各个经典案例,这些章节再次强调了理解业务,尽量少做事不做事的思想有多么重要。
这就是本书的全部内容,学完这本书后,大家还会发现,原来用少做事的思想去学习数据库是那么的亲切,那么的容易理解和记忆。用尽可能将知识落地在工作中的意识去学习,学完后应用在工作中的那种感觉,是多么让人兴奋。
最后就是写书风格的确认了,这是一本风格非常有趣的书,灵感来源于我平时大量的授课。很多学员告诉我他们特别喜欢上我这样风格的课程,非常容易理解也非常实用。对此我很开心,猛然有一天有了这样的一个想法,将我的视频变成文字,这个想法得到我弟梁敬弘博士的大力支持,并答应帮我一起完成此书。于是全书就变成了“老师讲课、学生听课,老师提问、学生回答,学生提问、老师解答”这样的轻松对话方式。我终于实现了将视频变成文字。这本书成了一本轻松的书,读者很容易身临其境产生共鸣。而我讲述知识的方式也变得非常灵活了,有时故意不说的重点知识,在学生们的思考中被引发出来,而读者也一同经历了这个难忘之旅。本书还有一个显著的特点,就是所有的知识点推论都有试验证明,而这些试验读者完全可以自己进行,再现老师的结果。这在保证课程准确性的同时,能让读者进一步加深印象。不过全书最有趣的特点还是我构造的小余一家的故事。
学完本书后,大家就会发现,虽然当前时代数据压力比较大,但是并不可怕。其实调优如同生活一般,一点都不神秘。在老师的故事中,平均每处理 10 个成功案例中,就有 5 个不是依赖技术来解决的,真是一个有趣的数字。牢牢抓住需求,在设计和开发中巧妙地应用“少做事,不做事”的思想,产品就能高效,就很少存在性能问题,基本上就很少需要调优。
学完此书后相信大家会有一种强烈的感觉,原来学习技术可以如此轻松,原来学习要落地才有意义,原来少做事的意识这么重要。如果大家真有这个感觉,那我的所有努力——苦心积虑的书写风格、精心构造的试验脚本、精彩有趣的经典案例就没有白费了。我对于如何写此书的规划如图0-6所示。
图0-6 书该如何写
最后我希望读者收获,不止Oralcle!