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

时间:2010-03-18 17:38:55

标签: sql-server sql-server-2005 performance

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

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

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

我应该看什么?我可以使用哪些工具来调查这种情况发生的原因?

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:1)

运行SQL Server Profiler以收集有关在SQL Server中运行进程的信息。这可能是最好的开始。这将使您了解消耗大量资源的事情。

如果索引/重建索引或重写查询后仍有问题,那么下一步就是运行PerfMon。