现在很多用户被数据库的慢的问题所困扰,又苦于花钱请一个专业的DBA成本太高。软件维护人员对数据库的了解又不是那么深入,所以导致问题迟迟不能解决,或只能暂时解决不能得到根治。开发人员解决数据问题基本又是搜遍百度各种方法尝试个遍,可能错过诊断问题的最佳时机又可能尝试一堆方法最后无奈放弃。

    怎么样让琐事缠身的程序维护人员,用最快的方式解决数据库出现的问题?怎么让我们程序员的痛苦降低到最小...每天喝喝茶水,看看新闻平安度过一天呢?本系列重要通过Expert for sqlserver 工具讲解下数据库遇到的各种问题的表象及导致这样问题的根本原因,让定位问题更准确,解决问题思路更清晰!!

    数据库的性能好坏,对于最终用户来说表现为点击的操作是否能够快速响应,那么反应到数据库上就是语句执行时间是否够短!

    对用运维人员数据库性能的表现,简单可能看成CPU 、内存、磁盘三巨头指标是否正常,那么今天我们就从CPU 下手,看看CPU能够看出哪些问题!

废话不多说,直接开整---------------------------------------------------------------------------------------------------

  主要用到的性能计数器(不知道什么是性能计数器的,请自行百度)

  就用两个~

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

排除应用影响CPU                       

    

    

  

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

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

CPU 问题分析                        

   CPU很高或者达到100%一定是你业务压力很大?CPU 不能满足你的需求么?在下结论前请仔细分析,一个草率的定论可能换来,老板一个安慰“世界那么大你该出去走走了!”

   下面我们用几个典型的场景,分析下问题,并给出最佳实践~

高峰时段CPU 持续很高

    

                                图中是服务器几天的CPU情况

    很多人看到这张图,是不是看到了自己的服务器?是否有一种亲切感呢~下面我们来分析下这种表象可能存在的问题!

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

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

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

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

  

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

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

    注:很多时候并行度设置和你的服务器CPU配置有关,比如有几路、几核、是否超线程,一般来说不要跨物理CPU为好。

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

    并行度的设置是针对实例级别的设置(2016中可以对单独数据库设置)

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

    

  

    并行度的调整可谓谁用谁知道啊,下面我们说说系统老大难的问题--语句导致CPU高

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

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

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

CPU 规律波动

    拿到CPU的监控数据不要盲目下结论,数据往往是最能反映问题,给你提供思路的!

    

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

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

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

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

CPU 突然飙高

    

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

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

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

    如果没有你的判断真是毫无根据...也错过了一次发现问题,学习知识的机会!

    排除上述异常,最有可能的原因就是数据库中,在那一刻有一个或多个语句运行异常,或非常不优化。如果这情况真的因为语句问题,而且只出现一次,那么这可能不是问题,我们尽量找到当时的语句,查看问题。找到当时的语句可以通过系统视图sys.dm_exec_query_stats 查看CPU消耗以及运行时间,或者由自己的监控工具得到。

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

    

    

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

CPU 真高

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

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

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

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

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

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

    

-----------------------给出一些CPU相关的文章连接-----------------------------------------------------

桦仔的  SQLSERVER排查CPU占用高的情况

高大侠的  深入解析SQL Server并行执行原理及实践(下)

careyson的 谈一谈SQL Server中的执行计划缓存(上)

常用 监控SQLSERVER性能计数器

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

原创链接:http://www.cnblogs.com/double-K/p/5536114.html

为了方便阅读给出系列文章的导读链接:

SQL SERVER全面优化-------Expert for SQL Server 诊断系列

转载于:https://www.cnblogs.com/binghou/p/9171598.html

Expert 诊断优化系列------------------你的CPU高么?相关推荐

  1. Expert 诊断优化系列------------------透过等待看系统

    上一篇我们简单的介绍了,语句优化的三板斧,大部分语句三板斧过后,就算不成为法拉利也能是个宝马了.为了方便阅读给出系列文章的导读链接: SQL SERVER全面优化-------Expert for S ...

  2. Expert 诊断优化系列------------------内存不够用么?

    现在很多用户被数据库的慢的问题所困扰,又苦于花钱请一个专业的DBA成本太高.软件维护人员对数据库的了解又不是那么深入,所以导致问题迟迟不能解决,或只能暂时解决不能得到根治.开发人员解决数据问题基本又是 ...

  3. MySQL优化系列3-Linux查看CPU、内存、磁盘、网络信息

    备注:测试数据库版本为MySQL 8.0 文章目录 一.查看CPU信息 1.1 查看物理CPU个数 1.2 查看每个物理CPU中core的个数(即核数) 1.3 查看逻辑CPU的个数 1.4 查看CP ...

  4. mysql-fron快速写sql语句,SQL优化系列:如何书写高质量SQL语句(一)

    写SQL语句的时候我们往往关注的是SQL的执行结果,但是是否真的关注了SQL的执行效率,是否注意了SQL的写法规范? 以下的干货分享是在实际开发过程中总结的,希望对大家有所帮助! 1. limit分页 ...

  5. 【Linux 性能优化系列】Linux 性能优化 -- CPU 性能篇(三) Linux 软中断

    [Linux 性能优化系列]Linux 性能优化 -- CPU 性能篇(三) Linux 软中断 [1]相关概念 [1.1]中断 中断其实是一种异步的事件处理机制,可以提高系统的并发处理能力:为了减少 ...

  6. CocosCreator客户端优化系列(四):CPU占用及性能优化

    来自:https://blog.csdn.net/zzx023/article/details/88991314 CocosCreator客户端优化系列(四):CPU占用及性能优化 这篇文章是优化系列 ...

  7. 【Linux 性能优化系列】Linux 性能优化 -- CPU 性能篇(一) 平均负载、上下文切换、CPU 使用率

    [Linux 性能优化系列]Linux 性能优化 -- CPU 性能篇(一) 平均负载.上下文切换.CPU 使用率 [1]相关概念 [1.1]平均负载 平均负载是指单位时间内,系统处于可运行状态和不可 ...

  8. Android性能优化系列:CPU收敛优化(线程优化)

    文章目录 线程调度 线程调度的原理 线程调度模型 Android 的线程调度 线程调度小结 Android 异步方式汇总 Thread HandlerThread IntentService Asyn ...

  9. CPU高负载排查小技巧(2分钟速读版),细心的优化可能为公司节省一个亿!

    女主宣言 服务优化是一个细心.漫长的过程,一个很小的优化不仅可以为用户带来更稳定更快速的互联网体验,也许还会为公司降低百万以上的成本.熟练掌握服务端排错技巧,已经是"匠心工程师"的 ...

最新文章

  1. Windows Mobile 与 PC之间的通过蓝牙(Bluetooth) 传输文件的开发
  2. 怎样去除excel表中的虚线_Excel教程:F1键强大的功能,你会用吗?
  3. Python爬取房天下租房信息实战
  4. Hark的数据结构与算法练习之图书馆排序
  5. java 乘法 位移_java 位移运算与乘法运算
  6. ajax 页面无刷新,Ajax的页面无刷新实现详解(附代码)
  7. 3.Android的新虚拟ART与原虚拟机DVM的区别
  8. 送给计算机老师的话,送给老师的话
  9. nmap扫描局域网存活主机_第十五天Nmap篇:每日一练之Kali Linux面试题
  10. 五子棋python设计心得_python五子棋游戏的设计与实现
  11. Apache VirtualHost的配置
  12. 你干的是高档活儿还是Low逼活儿,就在一念之间
  13. SpotMicro 12自由度四足机器人制作(两套方案)
  14. 概率论考点之相关系数
  15. FPU、MMX、SSE
  16. NB-Iot烟感03:感烟探测器原理图设计
  17. “核高基”专项与永中软件的大事记
  18. 【36C++STL-常用容器----5、stack容器详解】
  19. 酷开系统让父母的老年生活也开始智能化
  20. 迷失lost结局什么意思_《迷失》今晨结局:多个谜团依然未解(剧透)

热门文章

  1. cactus java_Cactus入门
  2. mask rcnn 召回率_搜索推荐召回amp;amp;粗排相关性优化最新进展—2020
  3. 网游源码完整服务端_【每日源码】微人事是一个前后端分离的人力资源管理系统,项目采用SpringBoot+Vue开发。...
  4. pytorch张量_PyTorch张量-详细概述
  5. textview 复制粘贴_Android TextView使用剪贴板复制粘贴
  6. luhn算法java_Java信用卡验证– Java中的Luhn算法
  7. 深度学习 keras_Keras深度学习教程
  8. 迅捷cad_迅捷套装
  9. C++数字与字符串的相互转换
  10. 酷客多小程序携手Richly network Pte Led正式进军新加坡市场