SQL SERVER?CPU问题定位与解决
作者:SQL专家云 发布时间:[ 2017/2/9 10:54:02 ] 推荐标签:数据库 SQL Server
CPU问题定位基本流程:
性能计数器诊断
主要用到的性能计数器
%Process Time 全实例 (主要用于查看当前服务器的CPU 情况)
%Process Time sqlservr (主要用于查看数据库使用的CPU情况 )
步骤1.排除应用影响CPU
综合这两个计数器 在同一时间点可以诊断出CPU 是否是被服务器其他的应用所消耗的,如图中17:10 左右的 “%Process Time 全实例(红线)” 突然升高,而SQL 服务的(绿线)并无明显升高,这也说明,在这个时间段的CPU 压力不是有数据库导致的!
这个红线的明显升高时,因为我在数据库所在的服务器上做了一次文件压缩!类似文件压缩这种操作会使用大量CPU,对数据库性能造成冲击!
步骤2.CPU 问题定位
高峰时段CPU 持续很高
CPU 规律波动
CPU 突然飙高
图中 9点CPU由平均20几飙升到
步骤3.CPU 问题分析与解决(通用步骤)
首先明确一点90%的问题可能集中在10%的场景,这种CPU 持续持续很高的情况请注意下面两点:
你的数据库并行度是否调整?
你的数据库是否缺少索引,导致频繁的查询消耗很高的CPU资源?
并行度和并行阀值
大并行度是什么?简单的可以理解为执行一条语句多可以使用多少个CPU。看起来当然是使用的越多越好啦,使用的越多语句肯定越快呀! 这个答案是大写的 “NO”,使用过多的CPU会导致线程协同工作产生的时间较长,直接导致语句很慢,而且消耗的CPU时间很多,导致CPU使用高,进而成为瓶颈!
看一个数据语句持续时间也是执行时间,但是看看CPU的时间,这是没有设置并行度,一个并行计划会产生大量的CPU消耗,另外会让语句执行的更慢!
那么是不是使用的越少越好呢?任何事情没有的,视情况而定,如果系统有比较大数据量的操作需求,并行使用多个CPU会有很大的提升。
一般建议系统如果超过32个CPU 那么设置成8或者4,如果系统中都是特别短小且频繁的语句建议设置成1(取消语句并行,要慎重真的符合你的场景才好)
注:很多时候并行度设置和你的服务器CPU配置有关,比如有几路、几核、是否超线程,一般来说不要跨物理CPU为好。并行度的设置是针对实例级别的设置(2016中可以对单独数据库设置)
并行开销的阀值,主要控制SQL优化器何时选用并行计划,建议默认值,此值设置的越小优化器越容易选择并行计划。
怎么设置并行度和阀值,请看下图: 系统默认的并行度 为0,阀值默认为5
语句导致CPU高
语句导致CPU高也是很常见的问题之一,那么语句怎么调优降低CPU 消耗呢? 这里只做一些简单的说明,具体的语句调优、参数化减少语句编译,请看后面的系列文章。
语句调优的方式很多种,这里介绍和CPU相关为常用:
添加索引降低语句开销,执行需要的资源消耗少了消耗的CPU 自然相对少了。
降低语句复杂度,让SQL Server执行高效(同样也是降低资源消耗的方法)。
分析语句是否可以采用串行计划。
前端程序尽量参数化减少语句的编译消耗。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11