|
本帖最后由 yanyangtian4502 于 2012-5-14 11:23 编辑
一般而言,在诊断数据库性能问题的时候,我们会在早期做一些快速的分析,例如查看等待信息,这里,会通过sys.dm_os_wait_stats这个DMV来快速的一窥情况,通过这个DMV来查看数据库中有哪些资源处于等待,因为很多的时候,数据库的性能变差,问题就出现在等待上面。分析等待,是个不错的切入点。可以让我们开始“顺藤摸瓜”
,下面就举个例子,例如,如果发现PAGEIOLATCH_SH这个等待很多,那么可能就说明很多的回话都在获取缓存页的时候有延迟了。这个情况的发生,可以是因为有很多的回话,或者某一个回话请求可过多的数据页,但是此时这些需要的数据页并没有加载在数据缓冲区中。SQL Server要为每一个数据页去分配缓冲页,同时,也会在数据页上面放置一个锁。这里可能的瓶颈问题就是磁盘I/O。可能是磁盘子系统无法快速的返回数据页来响应这个多会话对,导致了这个等待的产生。
到这里,可能有人就认为:是不是磁盘子系统太慢了,要去购买更好的磁盘。
注意:分析到这里为止,这是说明:存在磁盘I/O问题,是因为磁盘子系统响应过慢,但是不说明磁盘子系统不满足现在的I/O。
那么这个时候,我们要进一步的分析,此时,因为我们随着I/O这条线往下面走,确认:到底是不是I/O产生了问题。
此时,我们可以进一步的查看sys.dm_io_virtual_file_stats,来证明是不是因为文件的读写问题产生了性能问题。我们也可以通过这个DMV来查看数据库中的每个文件的I/O的读写情况。
另外,作为补充的和确认的步骤,也要查看Physical Disk\Avg. Disk Reads/sec,Physical Disk\Avg. Disk Writes/sec性能计数器。】
如果这些值都很高,那么,我们基本可以估计:是I/O问题了。
到这里为止,问题还没有结束,诊断也没有结束,优化还没有开始,一切都是“可能”。
|
|