我有一台 SQL Server 机器,它的 CPU 使用率达到 100%。除了查看长时间运行的查询来确定导致此问题的原因外,我还应该采取什么步骤?
答案1
检查活动监视器以确保您没有任何大型回滚/交易正在进行。
其次,运行 SQL Server Profiler 来查明到底是什么影响了你的系统。
第三,检查分配给 SQL Server 的内存,因为内存堵塞会导致页面文件使用量增加,从而增加 CPU 消耗。
第四,检查确保服务器上没有其他正在运行的进程占用内存或 CPU。
此后,如果有长时间运行的查询遇到该框,只需进行一些查询优化(索引等)。
答案2
Perfmon -> 每个进程的 CPU 消耗,确保 SQL 是罪魁祸首
Perfmon -> 每秒的批次和编译数,查看您是否有几个令人讨厌的查询或一大堆小查询。
一般来说(没有看到您的设置)如果您有大量的 CPU 操作而磁盘活动不多,则意味着 SQL Server 使用的数据适合内存但未有效索引。这意味着查询会花费大量 CPU 周期来扫描内存中的数据页,因为缺少简化和加速该过程的索引结构。如果数据较大或 RAM 较小,则这将显示为 I/O 瓶颈。但如果 RAM 充足且数据集较小,则会出现 CPU 瓶颈。
因此,下一站是对缺失索引 DMV 的查询,您可能会发现许多高成本查询需要更好的索引。不过,请谨慎对待结果,并有选择地实施。
答案3
那么它在做什么?
如果正在进行选择,则需要添加索引。或者从连接中删除笛卡尔坐标。
如果它正在添加索引,您需要喝杯咖啡并等待。;)
如果正在进行更新检查,则 where 子句必须仅包含应更新的行。
如果正在进行插入(或更新),请检查是否存在恶意触发器,或过多的索引,或(如果正在更新密钥)聚集索引。
或者,可能您需要提交或转储日志。