`
SQL专家云技术团队
  • 浏览: 17672 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【精华】SQL SERVER——CPU问题定位与解决

 
阅读更多
 
 
CPU问题定位基本流程:
 
性能计数器诊断

主要用到的性能计数器

  1. %Process Time 全实例  (主要用于查看当前服务器的CPU 情况)
  2. %Process Time sqlservr (主要用于查看数据库使用的CPU情况 )
 

步骤1.排除应用影响CPU

    综合这两个计数器 在同一时间点可以诊断出CPU 是否是被服务器其他的应用所消耗的,如图中17:10 左右的  “%Process Time 全实例(红线)” 突然升高,而SQL 服务的(绿线)并无明显升高,这也就说明,在这个时间段的CPU 压力不是有数据库导致的!

这个红线的明显升高时,因为我在数据库所在的服务器上做了一次文件压缩!类似文件压缩这种操作会使用大量CPU,对数据库性能造成冲击!

 

 

步骤2.CPU 问题定位

 

高峰时段CPU 持续很高

 

 

CPU 规律波动

 

 

CPU 突然飙高

  

       图中 9点CPU由平均20几飙升到100%

 

 

步骤3.CPU 问题分析与解决(通用步骤)

 

 首先明确一点90%的问题可能集中在10%的场景,这种CPU 持续持续很高的情况请注意下面两点:

  1. 你的数据库并行度是否调整?
  2. 你的数据库是否缺少索引,导致频繁的查询消耗很高的CPU资源? 

 

并行度和并行阀值  

    最大并行度是什么?简单的可以理解为执行一条语句最多可以使用多少个CPU。看起来当然是使用的越多越好啦,使用的越多语句肯定越快呀! 这个答案是大写的 “NO”,使用过多的CPU会导致线程协同工作产生的时间较长,直接导致语句很慢,而且消耗的CPU时间很多,导致CPU使用高,进而成为瓶颈!

  看一个数据语句持续时间也就是执行时间,但是看看CPU的时间,这就是没有设置并行度,一个并行计划会产生大量的CPU消耗,另外会让语句执行的更慢!    

    那么是不是使用的越少越好呢?任何事情没有绝对的,视情况而定,如果系统有比较大数据量的操作需求,并行使用多个CPU会有很大的提升。

一般建议系统如果超过32个CPU 那么设置成8或者4,如果系统中都是特别短小且频繁的语句建议设置成1(取消语句并行,要慎重真的符合你的场景才好)

注:很多时候并行度设置和你的服务器CPU配置有关,比如有几路、几核、是否超线程,一般来说不要跨物理CPU为好。并行度的设置是针对实例级别的设置(2016中可以对单独数据库设置)

     并行开销的阀值,主要控制SQL优化器何时选用并行计划,建议默认值,此值设置的越小优化器越容易选择并行计划。

    怎么设置并行度和阀值,请看下图: 系统默认的并行度 为0,阀值默认为5

 

 

语句导致CPU高

 

    语句导致CPU高也是很常见的问题之一,那么语句怎么调优降低CPU 消耗呢? 这里只做一些简单的说明,具体的语句调优、参数化减少语句编译,请看后面的系列文章。

语句调优的方式很多种,这里介绍和CPU相关最为常用:

  1. 添加索引降低语句开销,执行需要的资源消耗少了消耗的CPU 自然相对就少了。
  2. 降低语句复杂度,让SQL Server执行高效(同样也是降低资源消耗的方法)。
  3. 分析语句是否可以采用串行计划。
  4. 前端程序尽量参数化减少语句的编译消耗。
 

 

步骤4.CPU 问题分析与解决(特殊排查步骤)

 
持续很高

    持续很高很可能是由于几条不优化语句频繁运行,或大面积不优化语句运行。处理此类问题一般需要分阶段处理。

 

通用步骤中调整参数,大量创建缺失索引后。重新收集分析。如果依然持续很高就要跟踪系统高峰时段具体运行的语句,降低语句的资源消耗。并同步分析压力的来源是否仍然有大量不优化的语句,或是cpu真的不能支撑业务(参见cpu真高)。
 
 
规律波动


如果你是系统维护人员,看到类似这样的CPU数据指标,如果你还不能有一些思路,请你好好熟悉下你的系统。

    这张图很清晰地反映出系统每半小时一次的CPU升高,那么别忙着去找对应时间点的语句,我们最少要好好想一下,系统中有什么操作半小时执行一直?SQL JOB?计划任务?前台定时处理?等等等

    这个规律的定时处理是否有异常?是否最近有什么改动?执行的结果是不是和你想的一样?

    也许问题就这么清晰的定位了......

 
突然彪高


CPU突然飙高可能是偶然的现象,也许你可以认为没有关系,但当你判断为偶然之前,请做过下面的分析:

  1. 彪高的时间点运行什么语句,是否异常
  2. 分析过系统日志,CPU飙高时间点是否有异常
  3. 检查服务器上有什么特殊应用
  4. 检查了数据库状态
  5. 马上开启监控为下一次突发情况的到来做好准备

    排除上述异常,最有可能的原因就是数据库中,在那一刻有一个或多个语句运行异常,或非常不优化。如果这情况真的因为语句问题,而且只出现一次,那么这可能不是问题,我们尽量找到当时的语句,查看问题。

找到对应的时间点看看到底是什么语句在运行

 

    对这条语句进行分析到底是为什么!

CPU 真高

    经过各种分析优化,如果依然CPU压力明显,真心是硬件不能支撑业务了,那么我们就要选择更高大上的方式了,比如修改程序设计垂直/水平拆分,添加硬件,读写分离分担压力,组建集群负载均衡等等手段......

 

-----------------------------------------------------------------------------------------------------

  总结:对于CPU压力的解决,大部分的用户可以通过调整并行度和系统语句的优化来解决。

      另外对系统的监控和分析在诊断问题及解决问题中起到至关重要的作用。

      在下结论前一定要经过仔细的分析研究,一个想当然的决定可能造成严重的影响。

     你的系统真的需要加硬件,或高大上的方案么?     

 

1
0
分享到:
评论

相关推荐

    优化 SQL Server CPU 性能

    在优化 SQL Server CPU 性能时,一般有两种途径可以确定 CPU 的性能问题。第一种途径是检查系统的硬件性能,这种做法有助于继续确定使用第二种途径 —— 检查服务器的查询效率时从何处入手。第二种途径在确定 SQL ...

    解决SQLserver挂起小工具

    本文将深入探讨挂起问题的成因,并介绍如何使用“SQLserver挂起小工具”——SQLup.exe来有效解决这一问题。 挂起问题通常是由于多种原因造成的,包括但不限于: 1. **资源不足**:安装过程中可能由于系统内存、CPU...

    SQLSERVER_大内存选项开启

    进一步使用SQL Server自带的性能监视工具——SQL Server Profiler,监测到的`Avg.DiskQueue Length`和`Pages/Sec`指标异常偏高,分别达到万级和60,远超出正常值。这表明数据库频繁地向硬盘请求数据,而非高效地利用...

    DataQurey Sqlserver 远程浏览工具

    5. **性能监控**:通过DataQurey,用户可以实时监控SQLServer的性能指标,如CPU使用率、内存占用、磁盘I/O等,及时发现并解决问题。 三、使用教程 1. **安装与启动**:下载DataQurey压缩包,解压后运行应用程序,...

    关系型数据库应用的性能优化——基于SQL Server平台.pdf

    《关系型数据库应用的性能优化——基于SQL Server平台》 关系型数据库在现代信息系统中扮演着核心角色,而SQL Server作为广泛使用的数据库管理系统,其性能优化对于提升整体系统效率至关重要。本文将深入探讨如何在...

    逐步精通数据库(sql server)

    - **监控与分析**:使用 SQL Server Profiler 和 DMVs (Dynamic Management Views) 等工具进行性能监控和问题诊断。 #### 七、安全与权限管理 - **登录与用户**:登录是连接到 SQL Server 的凭据,用户是数据库...

    监控_SQL_Server_2005_的运行状况

    本文将详细介绍如何使用SQL Server 2005提供的内置工具——动态管理视图(Dynamic Management Views, DMVs)和动态管理函数(Dynamic Management Functions, DMFs)来监控系统的运行状况。 #### 动态管理视图与动态管理...

    Troubleshooting Performance Problems in SQL Server 2005.doc

    本文档旨在提供一个逐步的指南,帮助管理员诊断并解决这些问题,主要利用的是SQL Server Profiler、System Monitor(Perfmon)以及SQL Server 2005中的新特性——动态管理视图。 **Introduction** 引入部分指出,...

    配置SQL Server 2008的资源调控器——通过向工作负载分配资源重获SQL Server系统控制权.pdf

    SQL Server 2008的资源调控器提供了一定程度上的资源控制功能,有助于预防性能问题,并能够识别正在使用的应用程序。 资源调控器通过创建资源池来控制分配给会话的CPU和内存资源。在资源调控器中,我们可以设定应用...

    win7,64位安装SQL SERVER2000

    * 如果安装过程中出现问题,可以删除注册表中跟 sql server 相关的键,例如 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer 和 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\MSDTC。 安装设置 1. ...

    系统资源调整——寻找影响SQL Server性能的硬件瓶颈.pdf

    总结来说,本文为数据库管理员和技术专家提供了一套系统资源调整的方法论,用以识别和解决SQL Server在处理器、磁盘和内存方面的硬件瓶颈问题。通过系统监视器的合理运用,可以实时监测资源使用状况,并结合实际业务...

    MyQQ-sqlserver.rar

    本文将以"MyQQ-sqlserver.rar"为例,深入探讨腾讯QQ这款庞大社交软件背后的数据库管理系统——SQL Server的应用与实践。 一、SQL Server简介 SQL Server是由微软公司开发的一款关系型数据库管理系统,以其强大的...

    HIS数据库升级——SQL2005到SQL2014的跨版本升级.pdf

    在HIS数据库升级过程中,选择从SQL Server 2005升级到SQL Server 2014是一个跨版本的升级方案。在升级前,需要考虑软件选择、硬件配置、数据迁移策略、系统测试以及风险评估等多个方面。由于数据库升级可能会对现有...

    SQL Server数据库原理与教程-电子教案

    **SQL Server数据库原理与教程——电子教案** 在IT领域,SQL Server是一款由微软公司开发的关系型数据库管理系统(RDBMS),广泛应用于企业级数据存储、管理和处理。本教程重点讲解了SQL Server 2000的数据库原理,...

    SQL Server 2005 课程设计

    ### SQL Server 2005 课程设计:深入解析与实战指南 #### 一、SQL Server 2005 新架构体系与部署 SQL Server 2005 的推出标志着微软在数据库管理系统上的重大进步,它不仅提升了数据处理能力,还增强了安全性和可...

    PremiumSoft Navicat for SQL Server Enterprise Edition v10.0.7

    《全面解析:PremiumSoft Navicat for SQL Server Enterprise Edition v10.0.7——高效数据库管理与开发的得力助手》 在信息技术高速发展的今天,数据库管理的重要性日益凸显。对于使用Microsoft SQL Server的企业...

    创建SQL Server 2005 UDFs步骤详解——遵照这些手动步骤或使用Visual Studio自动化该过程.pdf

    SQL Server 2005 引入了与.NET Common Language Runtime (CLR) 的集成。这种集成允许数据库开发人员使用.NET语言,如*** (***)和C#,来创建存储过程、用户定义函数(UDFs)和触发器等数据库对象。 CLR集成的关键优势...

    SQL Server——从入门到放弃(15)– 第九章: 关系查询处理和查询优化 课后习题

    在SQL Server的学习过程中,关系查询处理和查询优化是至关重要的环节,它们直接影响到数据库的性能和效率。本章我们将深入探讨这两个主题,并通过课后习题来加深理解。 首先,让我们了解一下关系查询处理。关系查询...

    sql安装挂起解决软件

    关闭这些防护措施,或者临时为SQL Server安装添加例外,可以解决问题。 3. **与现有组件冲突**:如果系统中已安装的其他软件与SQL Server有冲突,也可能导致安装挂起。检查系统中的冲突软件并卸载或更新它们,有时...

    SQL Server数据库设计与系统开发教程PPT

    **SQL Server数据库设计与系统开发教程** SQL Server是一款由Microsoft公司开发的关系型数据库管理系统,广泛应用于企业级数据存储、管理及分析。本教程将深入探讨SQL Server在数据库设计与系统开发中的关键概念和...

Global site tag (gtag.js) - Google Analytics