SQL Server慢,但CPU正常

我们在虚拟服务器上托pipe的SQL Server有一些麻烦。 我们偶尔会有很短的时间,即使执行一个简单的select需要几分钟。 在此期间,服务器上的CPU和内存使用情况显示正常。 我们已经使用性能监视器对服务器进行了一些基本的监视,但是这并没有发现任何东西,我们也没有想法。 诊断问题的下一步是什么?

编辑:

我们在服务器上看到的问题的唯一迹象是事件日志消息,告诉我们“SQL Server已经遇到x次I / O请求花费超过15秒来完成”

听起来像一个典型的I / O问题(呃,这就是你已经发布):)

我不是正常的Windows,但基本的问题是一样的:

  • 它是随机发生还是在特定时间发生?
    • 你在指定的时间内运行备份吗?
    • 有没有批量工作
    • 是否有任何你不知道的批处理作业(是的,仔细检查,可能是一些男人/女孩以某种自动的方式从客户端提交“批处理作业”)
    • 一些营销/开发人员运行一个讨厌的查询,需要通过整个磁盘
    • 这需要相当长的一段时间,所以这些人通常会在查询结束之前杀掉他们的客户端,从而创build更多的I / O
  • 你的磁盘是否健康?
  • 机器上是否还有其他I / O绑定服务正在运行?
  • 联网? (根据错误消息,这应该是问题,但墨菲从不睡觉)
  • 什么是服务器使用的历史数据?
  • 文件系统是否已满?
  • 有人(有意或无意)重新安排优先次序?

那么减速必须是CPU或磁盘瓶颈,或某种超时,如等待不可用的networking资源。 你提到的CPU是好的,你检查了PerfMon平均磁盘队列长度和磁盘字节/秒? 事件日志中是否有相关的错误?

FWIW我有几个运行在Hyper-V虚拟机上的SQL2005(标准和工作组)服务器,它们工作得很好,所以没有固有的问题。

JR

这个虚拟机与同一物理主机上其他虚拟机之间的资源争用问题,或者是主机本身有很大的活动(由于备份进程的运行导致很多I / O)。

另一种可能是你的虚拟服务器正在忙于做一些磁盘I / O密集型的工作(其他更大或更复杂的SQL查询同时运行?),而你的简单select也试图从磁盘读取数据。 由于I / O争用而阻塞的进程不会显示为CPU繁忙。 虽然除非你的简单select是简单的,但是查询多行,即使在这种情况下我也不会期望它花费“几分钟”,所以主机资源(可能是I / O带宽)争用更可能。

如果有什么会降低SQL速度的话,就是速度很慢的磁盘,或者没有正确的alignment分区。 我使用Equallogic SAN为磁盘运行一个SQL 2008内部的实例,它将执行任何物理SQL框。

如果虚拟服务器根本不显示任何问题,可能是主机服务器有问题。 这些问题往往出现在人们在每个虚拟服务器上放置太多虚拟CPU的地方,这增加了阻塞物理主机cpu的机会。

我会想象答案已经在其他答案之一。 不过也值得运行EXEC sp_Who2,并确保你的“简单查询”不被某种长时间运行的更新或类似的东西阻塞。

我以前被MS Access的链接表抓到了,这些链表有一些非常糟糕的locking习惯。

告诉我们更多关于支持你的主机/ sql虚拟机(本地,iscsi(hw / sw),nfs,san,sas,sata,供应商等)的存储? 从你最近的评论看,这听起来像是一个更好地检查的好path。

让我们知道你的虚拟机pipe理程序(和可能的主机操作系统)是什么,所以人们可以更直接地说出你的情况。