调试SQL Server速度慢:相同的数据库,不同的服务器

Cra*_*ker 0 sql-server performance sql-server-2005

有一段时间了,我们在新建的(基于VMWare的)SQL Server 2005数据库服务器上的传闻很慢.最近问题已经出现,我已经开始寻找问题的根本原因.

这是一个奇怪的部分:在我用作性能测试用例的存储过程中,执行速度的差异取决于我运行它的DB服务器.这是使用相同的数据库(mdf)和log(ldf)文件,从慢速服务器分离,复制和重新连接到快速服务器.这似乎不是(虚拟化)硬件问题:他的服务器速度是CPU容量的4倍,而速度快速服务器的2倍.

据我所知,问题在于服务器的环境/配置(操作系统或SQL Server安装).但是,我检查了一堆变量(SQL Server配置选项,运行服务,磁盘碎片),发现没有什么能够对测试产生影响.

我应该看什么?我可以用什么工具来调查为什么会这样?

Rem*_*anu 6

盲目地检查变量和设置不会让你走得太远.你需要有条不紊地处理这个问题.

  1. 这两个程序是否以相同的方式执行?也就是说,计划有何不同?快速检查SET STATISTICS IO ON并运行这两种情况.逻辑读取的数量是否相同?物理读数是否相同?写入次数是否相同?逻辑读取或写入的差异将表明不同的计划.物理读取的差异(逻辑读取相似)表示缓存和内存问题.如果计划不同,您需要进一步调查实际执行计划中的不同之处.一个计划是否使用不同程度的并行性?是否使用不同的连接类型?不同的访问路径?
  2. 如果计划相似但执行仍然不同,并且您不能责怪IO子系统,那么您需要检查争用.SET STATISTICS TIME ON在两种情况下使用并比较经过的时间和工作时间.类似的工作时间但不同的经过时间表明在一个案例中有更多的等待.使用sys.dm_exec_requests中的wait_type和wait_resource信息来确定争用的原因.

Waits and Queues白皮书中更详细地讨论了调查方法.