代码之家  ›  专栏  ›  技术社区  ›  Craig Walker

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

  •  0
  • Craig Walker  · 技术社区  · 16 年前

    一段时间以来,我们在新开发的(基于VMware的)SQLServer2005数据库服务器上的速度一直很慢。最近,问题已经到了顶点,我开始寻找问题的根本原因。

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

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

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

    2 回复  |  直到 16 年前
        1
  •  6
  •   Remus Rusanu    16 年前

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

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

    调查方法将在 Waits and Queues whitepaper .

        2
  •  1
  •   Raj More    16 年前

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

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

    推荐文章