今天线上SQLServer数据库的CPU被打爆了,紧急情况下,分析了数据库阻塞、连接分布、最耗CPU的TOP10 SQL、查询SQL并行度配置、查询SQL 重编译的原因等等
整理了一些常用的SQL
1. 查询数据库阻塞
1 |
|
查询结果中,重点看Blocked这一列,先找出最多的SID,然后循环找出Root的阻塞根源SID
查询阻塞根源Session的SQL
1 |
|
2. 查询SQL连接分布
1 |
|
3. 查询最消耗CPU的SQL Top10
1 2 3 |
|
4. 查看SQLServer并行度
1 |
|
并行度如果设置为1,To suppress parallel plan generation, set max degree of parallelism to 1
将阻止并行编译生成SQL执行计划,最大并行度设置为1
设置策略和具体设置方法,请参考:Configure the max degree of parallelism Server Configuration Option - SQL Server | Microsoft Docs
1 2 3 4 5 6 7 8 9 10 |
|
5. 查询SQL Server Recompilation Reasons
1 2 |
|
6. 将SQL Trace文件存入一张表,做聚合分析(CPU、IO、执行时间等)
1 2 3 |
|
对上述表数据进行聚合分析最耗时的SQL
1 2 3 4 5 6 7 8 9 10 11 12 |
|
最耗IO的SQL
1 2 3 4 5 6 7 8 9 10 11 12 |
|
最耗CPU的SQL
1 2 3 4 5 6 7 8 9 10 11 |
|