![SQL Server 运行缓慢但 CPU 正常](https://linux22.com/image/485086/SQL%20Server%20%E8%BF%90%E8%A1%8C%E7%BC%93%E6%85%A2%E4%BD%86%20CPU%20%E6%AD%A3%E5%B8%B8.png)
我们在虚拟服务器上托管的 SQL Server 遇到了一些问题。我们偶尔会遇到短时间,甚至执行简单的选择也需要几分钟。在此期间,服务器上的 CPU 和内存使用率似乎正常。我们使用性能监视器对服务器进行了一些基本监控,但这并没有发现任何问题,我们也没有主意。诊断问题的下一步是什么?
编辑:
我们在服务器上看到的问题的唯一迹象是事件日志消息,通知我们“SQL Server 遇到了 x 次 I/O 请求,耗时超过 15 秒”
答案1
在我看来,这听起来像是一个典型的 I/O 问题(哦,这就是您已经发布的内容):)
我通常不使用 Windows,但基本问题是一样的:
- 它是随机发生的还是在特定时间发生的
- 您是否在指定时间内运行备份
- 有没有批处理作业
- 是否存在你不知道的批处理作业(是的,请仔细检查,可能是某些人以某种自动方式从客户端提交“批处理作业”)
- 一些营销/开发人员运行需要遍历整个磁盘的讨厌的查询
- 这需要相当长的时间,所以这些人通常会在查询完成并开始另一个查询之前终止他们的客户端,从而产生更多的 I/O
- 你的磁盘健康吗?
- 机器上是否正在运行其他 I/O 密集型服务
- 网络?(那不应该根据错误信息是问题所在,但墨菲从不睡觉)
- 服务器使用情况的历史数据是什么?
- 文件系统是否已满?
- 是否有人(有意或无意地)重新安排了优先事项?
答案2
那么速度变慢肯定是 CPU 或磁盘瓶颈,或者是某种超时,例如等待不可用的网络资源。您提到 CPU 没问题,您检查过 PerfMon 平均磁盘队列长度和磁盘字节数/秒吗?事件日志中是否有相关错误?
值得一提的是,我有几个在 Hyper-V VM 上运行的 SQL2005(标准和工作组)服务器,它们运行良好,因此不存在固有问题。
JR
答案3
最有可能的问题是该虚拟机与同一物理主机上的其他虚拟机之间争用资源,或者主机本身存在大量活动(由于运行备份进程而产生大量 I/O?)。
另一种可能性是,您的虚拟服务器正忙于执行磁盘 I/O 密集型操作(同时运行其他更大或更复杂的 SQL 查询?),而您的简单选择也正在尝试从磁盘读取。由于 I/O 争用而阻塞的进程不会显示为 CPU 繁忙。但除非您的简单选择很简单但查询很多行,否则即使在这些情况下我也不会认为它会花费“几分钟”,因此更有可能发生主机资源(可能是 I/O 带宽)争用。
答案4
如果虚拟服务器没有显示任何问题,则可能是主机服务器有问题。这些问题通常出现在人们在每个虚拟服务器上放置过多虚拟 CPU 的情况下,这增加了阻塞物理主机 CPU 的可能性。