阿里云SQL Server最佳实践:高CPU使用率问题排查

阅读原文请点击: http://click.aliyun.com/m/23114/
摘要: 在阿里云SQL Server最佳实践系列在线直播中,阿里云数据库专家汪建明总结了7大问题并结合案例为大家分享了阿里云SQL Server高CPU使用率问题排查的实践经验。

摘要:在阿里云SQL Server最佳实践系列在线直播中,阿里云数据库专家汪建明总结了7大问题并结合案例为大家分享了阿里云SQL Server高CPU使用率问题排查的实践经验。


本期直播回顾链接:http://yq.aliyun.com/webinar/play/237  更多系列精彩课程直播,尽在 云数据库经典案例和最佳实践专场,等待你的参与!



以下内容均根据演讲视频以及PPT整理而成。

演讲者简介
汪建明(花名:风移),近10年SQL Server数据库DBA经验。曾就职于新蛋中国6年、新蛋美国3年半。现任阿里云数据库专家,负责SQL Server产品线。

分享议程
本文将按照SQL Server高CPU使用率问题排查的7个方面进行分享:
缺失索引 (Missing Indexes)
索引碎片 (Indexes Fragmentation)
数据类型转换 (Data Conversion)
非SARG查询 (Non-SARG Query)
参数嗅探 (Parameter Sniffing)
统计信息 (Statistics)
TOP CPU查询 (TOP SQL)

一、缺失索引 (Missing Indexes)

690026b766004839d0f2897aaeae6d2bc5722295

为什么索引缺失会降低SQL Server的CPU使用率?
真正排查出的高CPU使用率的第一大因素就是Missing Indexes,那么为什么索引的缺失是SQL Server CPU使用率的第一大杀手呢?要回答这个问题就需要首先回答什么是索引。索引的结构其实是基表的某一列或者某几列数据的投影,并且这些列的数据是按照升序或者降序排列完毕之后的特殊结构,这个特殊结构使得查询的性能会更加高效,特别是对于经常会使用到的查询语句。既然索引特殊的结构已经排序完成了,那么在进行检索的时候效率就会非常高,可以很快地定位到数据所在的位置,这样就能够大大降低SQL Server本身的IO的消耗,IO的消耗降低之后CPU的使用率自然也会下降。

发现缺失索引的方法
如何发现哪些表中又缺失了哪些索引呢?第一种方法就是DTA (Database Tuning Advisor)。第二种方法就是执行计划中存在索引缺失的警告,也就是当执行某一条语句的时候,执行计划会报出一个警告提示这里缺少一个索引,这个时候就可以将缺失的索引找出来并创建它。第三种方法就是访问系统的动态视图,大致有sys.dm_db_missing_index_group_stats、sys.dm_db_missing_index_group_stats以及sys.dm_db_missing_index_details这三个视图,具体怎样去使用大家可以查阅帮助文档。

不要盲目地创建缺失的索引
在创建缺失索引时一定不要盲目,一定要确保创建的缺失索引是有效的,这样做的第一个原因是创建索引会导致一定的存储开销,因为索引的数据结构也会占用数据文件空间。第二个原因是DML操作会导致索引的维护成本增加,因为索引的结构是基于表的某列或者某几列组合出来的数据结构,这个数据结构的一致性一定是随着基表的数据变化而变化的,当我们进行Delete、Insert以及Update操作的时候也需要去维护索引的数据结构,因为需要保证索引结构数据与基表数据的一致性,所以就会带来索引维护成本的上升。

这部分的相关Demo请参考云栖社区的博客:https://yq.aliyun.com/articles/72265

二、索引碎片 (Indexes Fragmentation)
刚才提到了索引缺失会导致CPU使用率的升高,而另外一个问题是
阅读原文请点击: http://click.aliyun.com/m/23114/

猜你喜欢

转载自1369049491.iteye.com/blog/2379166