每天我都有一个会话产生 Avg.Disk Queue Length > 800(5 分钟间隔)。
我发现就在这之前 Sql Server 优化器犯了一个错误:它决定使用一个不合适的计划进行聚集索引扫描,这会产生大约 100Mb-1GB 的 IO 操作。假设我找到了排队的原因,但这不是全部。
恕我直言,巨大的 IO 不一定会冻结其他用户 15 分钟。虽然我不知道谁负责创建过多的异步 IO:Sql Server、Windows 文件系统,或者可能是物理 IO 控制器,但是产生的异步 IO 会导致一个巨大的异常队列,并且没有留下任何机会供其他会话从磁盘读取。
有没有办法控制异步IO?我想如果我能够降低队列长度(顺便说一句,“更真实的”当前队列长度计数器显示队列中有 400 个操作),那些查询计划的问题将不会冻结其他会话。
不过情况比较复杂:
更新:该表一点都不有趣,只是它对于 NAV 来说太大了(1 GB 带索引)。
一些查询的示例:
declare @p1 int set …Run Code Online (Sandbox Code Playgroud)