孙巍,来自微软(中国)有限公司
孙巍:刚才这两位都已经说了很多关于数据库优化方面的问题。我想说,对于性能优化,我们考虑的不仅仅是数据库的层面。我们整个去看的话,看的是整体应用的效率。应用结构,以及应用的效率来说,占我们整个性能的20%左右。对于数据库来说,物理设计也占在20%左右,对于我们语序的编写也占了20%,其他的各有10%都来自于其他的地方。基于这几个方面,我们对于数据库上可调的,可能是相应的参数上。有一些开发人员撤离之后,应用我们没有办法搞,是什么样,就是什么样。硬件结构,我们购买完了以后,所剩下的仅仅就是在于数据库的语序和索引。
刚才提到,基于用户的使用特征以及连接特性,我们的参数是不一样的。除了这三块以外,我们没有什么可以再去经营调整的。我们要知道问题出在哪?接下来怎么解决?最后加以跟踪。这三块是一个漫长的过程,并不是说我的工程师调完了以后,都能够保证你几年、十几年都会很好。我们可以通过一些工具自动检测、自动调整。
我们微软可以提供各种各样的参数,基于IO的基数,告诉我这个瓶颈存在什么地方。这时候,它提供了动态管理试图的东西。这样简单通过动态管理试图,可以知道系统实时的状态,比如系统内各个组件之间内存的效应。比如是连接占用的内存最多还是什么占用的最多?对于这种相应的试图关系,更可以通过简单的相应报表,比如之前我们看到的企业管理器,这个东西作为一些基本的管理,这个工具是可以足够的,但是对于性能分析来说,做得差很多。
我们单独增加的一些感觉报表,我们通过简单的报表就知道我们性能是什么样的。最直接的一个,就是很多数据库管理人员,我想知道我的数据库里面哪个是最慢的。每个占用的时间、相应的消耗资源是什么,都可以知道。除了这个以外,我们去监控系统的性能,我们的这种调整不一定最科学。有可能通过我们的调整导致某一个操作很快,但是其他的相应操作系统性能会慢下来。
接下来,微软还提供了一个专门配合数据库的工具。根据一天的工作压力,我可以通过数据库的工具,了解我这个系统里面为什么慢?是不是物理结构设计不对还是什么。这样给我们一些相应的调整建议,这时候我们可以直接执行,相应的索引、更新、结构的改变可以相应执行。这样可以把这个东西做成一个建议,分段的采纳。我只是适用于索引去改变,其他的不去改变,这样是从工具上的一些支持。从语句支持来说,也有很多一些相应的变化。比如提供了很多相应的函数。比如在之前,如果说是做一些分页显示,之前有很多相应的方法。那么在数据库2005年,我们提供的一些相应的指针和方法。比如同样做一个功能,面对二十万条的记录,我们用标准的提供一些的控件实现的话,会导致分页的操作超时,就没有办法完成。如果使用数据库2000,加上一些临时表的参数,大概就用了三十秒左右的时间。这个跟硬件有关系。
如果我们去使用新提供的相应函数,性能提升非常快。最后测算,根据不同里面算法的调整,我们对于单条数据库语句,使用新函数,可以提供更好的性能。我们第一个需要一套方法论,第二部分我们需要有一些相关工具的支持。从我个人来说,方法论无非就是一些大的指导方向,如果具体的话,不提到某一种工具,我认为都是很难实现的。毕竟我们在企业里面,我们的DBA都不是产品专家,在企业里面我也不可能找出很多产品专家,那样的话,我们需要各种各样的工具来支持。微软基于企业的这种需求,希望大家对于这种工具的使用,概念上的使用,如果有问题我们一会儿在讨论的时候再说。