有一段时间,我们在新建的(基于VMWare的)SQL Server 2005数据库服务器上的传闻很慢。最近问题已经出现,我已经开始寻找问题的根本原因。
这是一个奇怪的部分:在我用作性能测试用例的存储过程中,执行速度的差异取决于我运行它的DB服务器。这是使用相同的数据库(mdf)和log(ldf)文件,从慢速服务器分离,复制和重新连接到快速服务器。这似乎不是(虚拟化)硬件问题:慢服务器具有4倍的CPU容量和2倍于 fast 的内存。
据我所知,问题在于服务器的环境/配置(操作系统或SQL Server安装)。但是,我检查了一堆变量(SQL Server配置选项,运行服务,磁盘碎片),发现没有什么能够对测试产生影响。
我应该看什么?我可以使用哪些工具来调查这种情况发生的原因?
答案 0 :(得分:6)
盲目检查变量和设置不会让你走得太远。你需要有条不紊地处理这个问题。
SET STATISTICS IO ON
并运行两个案例。逻辑读取的数量是否相同?物理读数是否相同?写入次数是否相同?逻辑读取或写入的差异将表明不同的计划。物理读取的差异(逻辑读取相似)表示缓存和内存问题。如果计划不同,您需要进一步调查实际执行计划中的不同之处。一个计划是否使用不同程度的并行性?是否使用不同的连接类型?不同的访问路径?SET STATISTICS TIME ON
并比较两种情况下的经过时间和工作时间。类似的工作时间但不同的经过时间表明在一个案例中有更多的等待。使用sys.dm_exec_requests中的wait_type和wait_resource信息来确定争用的原因。 调查方法在Waits and Queues whitepaper中有更详细的讨论。
答案 1 :(得分:1)
运行SQL Server Profiler以收集有关在SQL Server中运行进程的信息。这可能是最好的开始。这将使您了解消耗大量资源的事情。
如果索引/重建索引或重写查询后仍有问题,那么下一步就是运行PerfMon。