我有一个在 Windows Server 2003 64 位上运行的 MSSQL 2005 实例,由于我无法找到的原因,它导致了高排队磁盘 IO(读取,而不是写入)。
有些事情:
- 我确信这是 SQL 服务器进程。
- 由于磁盘活动频繁,CPU 低,RAM 利用率低,因此该盒子响应很慢。
- 查看日志,有一些恢复操作已经完成,但似乎不是罪魁祸首(我可能是错的,但看起来它们在合理的时间内完成)
- 使用“sp_who2”我没有看到任何可以解释我所看到的大量磁盘 IO 的东西。
- 没有正在运行的备份作业。
- SQL Server 未尝试自动扩展数据文件。
服务器进程可能在这里尝试执行什么操作?我还能在哪里查看 SQL Server 在后台尝试执行的操作?
谢谢,丹
更新:重新启动服务器进程没有帮助。无论待处理的内容是什么,都会在重新启动后恢复。
更新:使用 SQL Server Profiler 进一步分析后发现,这是我自己的查询之一。经常轮询的表上的索引有 98% 是碎片化的,显然导致了大量磁盘活动。
更新:重建索引解决了这个问题。难以置信的是,一个小于 100k 行的表竟然会在一台相当强大的机器上造成这种麻烦。
答案1
好吧,我会尝试:
- 对硬盘进行碎片整理
- 运行 DBCC CHECKALLOC 和其他工具来检查数据库并重新索引表
- 虽然我认为这不太可能,但请检查你的逻辑磁盘配置
如果这些逻辑卷遇到大量并发 I/O 请求,则会发生磁盘抖动,因为超级卷是从同一组底层物理磁盘创建的。为了避免在这种情况下发生磁盘抖动,应注意在隔离的逻辑卷和物理磁盘上创建可能并发访问的分区。