越接触本质,越不会迷茫
迄今为止,我写了16年的程序,接触了12年的数据库,最近10年主要研究微软SQL Server的各个版本。2005、2006年,我还没有加入微软,作为一个ISV,我经常向海蔚提问:我的某个表,数据量超过50万行了,SQL Server能应付吗?我用ASP.NET搭建了一个ERP系统,有200人要用,SQL Server能应付吗?某某数据库能分区,SQL能做到吗?
当时问的得意,问得比较拽。也许做技术的人就是这样(至少我当时是这个德性):只要觉得自己比别人做得好,有了谈资,就会有一种想“秒杀掉”别人的、可笑的自豪感。只要我发现某某数据库比SQL Server强大,就借此刁难微软资深的SQL Server工程师。他们经常被我纠结得无语。
慢慢地与海蔚接触时间长了,我的看法发生了改变,(这不是短暂吸收技术后的反思,而是一种思考方向的转折。)到微软工作后,我处理过SQL Server 2005标准版上每个月增加1000万条记录的SQL单表,处理过SQL Server 2000上6亿5千万条的单表,我同事处理过SQL Server 2005上14TB的数据库。回想起自己当初那些傲慢的问题,真有些不好意思。
在微软的工作经历,让我认识到:
● 性能好坏,需要精确的数字。你看过Logical I/O Reads & Writes吗?你看过执行计划吗?你分析过为什么SQL要执行这个Scan,而不是Seek吗?你分析过Disk Queue的影响吗?你看过Pool paged bytes的大小吗?一句话,微软的工程师要看证据,一切要用数字说话。
● 性能调优的门槛不高,但是需要仔细研究。分析性能问题,第一步需要作什么,第二步作什么?我好久后才有感觉。万物万事万法,都是有规则的。窗户纸很薄,捅破了就是新世界。
● 文档太多,无所适从。如果你Bing(必应)“数据库索引优化”,会搜出不下100条教条,但是谁会全部记住?如果不理解Heap table和Clustered Table,不了解B-Tree和Seek/Scan,不了解Statistics和Check Point,那些所谓的教条,有何意义?
在海蔚的这本书里面,没有教条。有的只是让你了解本质、触类旁通、一法破万法的、来自微软全球技术中心(GTEC)全体SQL Server工程师的经验汇集,来自于海蔚的积累和升华。对于迷茫的读者而言,这是让你捅破窗户纸,看遍窗含西岭千秋雪的经典之作。
如果书中有两三句话让你顿悟,希望你把这份读书人的感动,及时地反馈给海蔚同学。
从文字的角度讲,字字珠玑。从学习的角度讲,我只想说:不存在教条!你越接触本质,越不会迷茫!这也许是众多读者从本书中获得经验的唯一途径。
鞠强
微软企业现场服务部资深工程师
2010年1月