title: sqlserver · case分析 · cpu瓶颈问题的判定和解决
数据库出现无法登陆的告警
活跃连接堆积
实例cpu持续99%+
实例总连接数超过规格
活跃链接堆积是结果,能堆积到500+可想对业务的影响已经非常严重了
连接数超过的原因跟业务上的限制策略有关
实例正常连接已经无法建立,只能利用dac协助诊断
<a href="https://technet.microsoft.com/en-us/library/ms178068.aspx">使用dac</a>
实例等待
cpu 开销大的sql
实例在无法连接前的一个诊断报告也和我们的检查结果一致
实例cpu使用率
等待信息
活跃连接都在等cpu调度,spid已经复用到1.6k+
为了让实例快速恢复,首先要做的是适当放大调整cpu affinity mask,并且让用户应用做适当降级不要再次压垮实例
长期需要优化sql逐步从根本上解决问题,当然也有的时候sql的执行计划已经很好,只是业务的并发和rt达不到用户要求,这就需要考虑升级或做业务调整
这个case通过类似几个sql优化达到了不错的效果
执行计划的bookmark可以进一步优化
优化建议
优化后的 sql开销
优化后的sql执行计划
逻辑读从5k降到6,cpu从31降到0 ms,且从执行计划来看已经最优
实例整体优化后cpu开销变化
cpu开销明显已经下降