2010-03-18 69 views
0

一段时间以来,我们一直在我们新开发的(基于VMWare的)SQL Server 2005数据库服务器上发现轶事缓慢。最近这个问题已经出现,我开始寻找问题的根源。调试SQL Server缓慢:相同的数据库,不同的服务器

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

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

我应该看什么东西?我可以使用哪些工具来调查为什么会发生这种情况?

+0

ServerFault.com是这个问题更好的地方。 – 2010-03-18 17:48:16

+0

@Raj:我在想我自己。我不反对将模块迁移到ServerFault。 – 2010-03-18 17:54:26

回答

6

盲目检查变量和设置不会让你走得很远。你需要有条不紊地进行。

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

调查方法在Waits and Queues whitepaper中有更详细的讨论。

1

运行SQL Server Profiler收集有关SQL Server中正在运行的进程的信息。这可能是最好的开始。这会给你一个消耗大量资源的好主意。

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

相关问题