上一篇我们说了索引的重要性,一个索引不仅能让一条语句起飞,也能大量减少系统对CPU、内存、磁盘的依赖。我想上一篇中的例子可以说明了。给出上一篇和目录文链接:

SQL SERVER全面优化-------索引有多重要?

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

  

  书接前文,我们知道了索引的重要,也知道了索引怎么加,那么我们应该往那些语句加?语句一条一条漫无目的的优化么?我怎么找出系统的问题语句?怎么样的一个优先级? 

  很多对数据库了解不是很多的人,也许一片茫然!还真不知道,那么多存储过程,那么多程序语句,我总不能都看一遍吧?

  对数据库有些了解的人可能会知道用profiler,系统视图等,这是个不错的方式!

  但是个人觉得这些不够直观,还是不能抓住重点,如果业务多变也会消耗大量时间。

  

  所谓工欲善其事,必先利其器!那么本篇我利用 Expert for sqlserver 讲述怎样抓住重点语句来优化你的系统!

  

  首先还是上座驾:

  

  

  

--------------博客地址---------------------------------------------------------------------------------------

Expert 诊断优化系列 http://www.cnblogs.com/double-K/

 

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

  本文选用的例子为一个服务器高配,跑了一个小业务,硬件资源充足,但是语句执行很慢!(32CPU,32G内存跑了个只有10G 数据文件的库)

  下面简单的一个展示:

  

  

  

  性能计数器指标请参见前文,本例中磁盘队列全天小于2,内存充足,CPU使用60%略有压力(主要是缺失索引导致)

  下面看一下总体的语句执行情况:

  

  

  语句可以看出超过1-3秒的语句有近8W次,3-5秒 5-10秒均接近2W,10秒以上的也有1W+,可见充足的资源配置下系统语句仍然很慢!

  • 语句优先级

  前面很多文章中都已经介绍过了,优化一定要针对重点语句,优化10条执行频率低的语句效果不及半条高频语句。那么找到系统中的高频语句就是优化的重中之重!

   直接上图!

  

    

   图中按照语句的执行次数排序,这也强烈符合我的优化套路,可以看出系统中执行频率最高的语句,平均执行时间都在3秒左右甚至更长,逻辑读都很高,但是影响的行数很少。这就是典型的缺少索引的情况!

   高能提示: 看到这样的一个统计界面,你是否知道如何下手了?怎么样的一个优先级? 没错次数从高往低,来吧!开整!

  根据个人习惯也可以按照逻辑读/写,cpu消耗等排出优先级。

  • 针对语句调索引

  拿到了重点语句,那么我们就从重点语句下手详细分析一下。上一篇已经介绍了简单粗暴的添加索引,简单粗暴大概能应对80%的场景了,但是也要有一些注意!下面新手看官们要认真体会了!

  

  

  我们看到了缺失索引的提示,这就和前文介绍执行计划的大绿字是一个个东西。这里不再详细介绍。那么拿到这个索引缺失我们就直接创建么?前文中告诉你们的答案是直接创建!新的文章中当然要学点新东西!创建前请先核实一下索引!何为核实一下呢? 首先我们看一下执行计划!由于执行计划比较大只贴出消主要耗部分~

  

  

  执行计划看出,缺失语句主要消耗在两部分,都是这个customer表,index scan 说明有相关字段的索引,但是不是最优的!那么提示的索引算是正确(字段验证这里就忽略了),那么现在可以创建了? 还需要再核查几个地方!

要创建索引的表有多少数据?

  

  

  表上有150W+数据 确实适合创建索引!

是否有这个类似索引?

  那么表上现在有什么索引呢?是新创建还是修改原有索引呢?

  

  一堆索引...一屏没截下....但是你会发现一个覆盖索引都没有?也没有针对这条语句的最优索引! 也许这个系统的维护人员知道索引的重要性,但是不知道怎么创建一个最优的索引,HOHO 让他看看上篇文章就好了!

  那么这回可以直接创建提示索引就OK了吧? 答案是大写的“NO”! 还需要你的细心!

  

创建的索引是否能使用? 

  前面 SQL SERVER全面优化-------写出好语句是习惯 已经提到过,where条件的字段中不能使用函数,不能有隐式转换,也不能用 like “%XXXX%” 这样就不能用索引查找seek了! 我们要看一下是否是提示的索引不能使用!

  

  如果你仔细的看了前文,你会反问:不能用不是就不提示了么? 哈哈,真是认真,确实是这样!这里只是个需要细心的温馨提示!

  但是每一篇文章重要更深入一下么,对吧! 前面看到原计划中customer表使用了index scan ,细心的看官们会发现还有个key lookup,index scan + key lookup 你不觉得奇怪么?

  

  我们看一下具体的语句:语句太长,只贴where 部分了  

  我们可以看到customername 确实使用了 like ”%%“ 无法使用seek,但是companyid 和createdate 可以使用索引呀~所以我们再看一下 提示出的索引: 

CREATE NONCLUSTERED INDEX [EFS_IX_Customer_b87864c46d0f4d3ca4ad4e4db8232063]
ON [dbo].[Customer] ([CompanyId],[CreateDate])
INCLUDE ([Id],[CustomerId],[CustomerName],[Project],[IndustryOneId],[IndustryTwoId],[SourceId],[StateId],[TypeId],[ProtectId],[Audit],[delFlag])
GO

  还是比较智能吧~这回你可以创建这个索引了!

  

  

  还得啰嗦一句:覆盖索引虽好,但创建要注意,不要把过多的列放在索引里。个人建议索引的筛选列+包含列不要超过表字段的1/3 ,纯属个人建议不是那么绝对。

  

  文章至此已经在上一篇的基础上又做了一些细节的说明。看官们可以按照优先级动手了。

  • 大面积创建缺失索引

  如果系统完全没有过保养,表上基本没有创建过什么索引,那么上面的创建方式一样很伤体力,这里还有一种简单粗暴的方式for you!

  

  大批量创建索引切记不要看到就创建,一定是影响、开销、次数都很高的,并且要优化合并生成的脚本,也就是上一篇提到的精简索引!

  

  • 根据执行计划创建

  这种方式和根据语句创建有异曲同工之妙,但不同的是一般的收集工具只收集1秒以上的语句。默认超过1秒才算慢,但是系统中有些语句执行不到一秒,但非常高频,这也是需要关注的一大类! 限于篇幅这里就不展开说了!

  

--------------博客地址---------------------------------------------------------------------------------------

Expert 诊断优化系列 http://www.cnblogs.com/double-K/

 

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

  总结 : 往往一个系统的整体缓慢都是因为索引问题导致的,优化索引是对你系统最简单的保养!

      不要小看一条语句的威力,一条语句足可以让你的系统彻底无法工作!

     相反优化一条重要的高频语句就可以让你的系统变的流畅!

     

     优化索引要有自己的方法,不能逮到一条做一条,效率又差又可能抓不住重点。

     每个人优化都有自己的一套方法,只有是够系统,够全面就可以。本文只是简单介绍自己的优化方式,不喜勿喷~

 

 Expert工具下载链接: http://www.grqsh.com/product_Expert.html

相关文章链接 : 

SQL SERVER全面优化-------索引有多重要?

SQL SERVER全面优化-------写出好语句是习惯

Expert 诊断优化系列------------------语句调优三板斧

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

注:此文章为原创,欢迎转载,请在文章页面明显位置给出此文链接!
若您觉得这篇文章还不错请点击下右下角的推荐,非常感谢!

  引用高大侠的一句话 :“拒绝SQL Server背锅,从我做起!”

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

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

Expert 诊断优化系列-------------针对重点语句调索引的更多相关文章

  1. Expert 诊断优化系列------------------语句调优三板斧

    前面三篇通过CPU.内存.磁盘三巨头,讲述了如何透过现在看本质,怎样定位服务器三巨头反映出的问题.为了方便阅读给出链接: SQL SERVER全面优化-------Expert for SQL Ser ...

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

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

  3. Expert 诊断优化系列------------------冤枉磁盘了

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

  4. Expert 诊断优化系列------------------给TempDB 降温

    前面文章针对CPU.内存.磁盘.语句.等待讲述了SQL SERVER的一些基本的问题诊断与调优方式.为了方便阅读给出导读文章链接方便阅读: SQL SERVER全面优化-------Expert fo ...

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

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

  6. Expert 诊断优化系列------------------锁是个大角色

    前面几篇已经陆续从服务器的几个大块讲述了SQL SERVER数据库的诊断和调优方式.加上本篇可以说已经可以完成常规的问题诊断及优化,本篇就是SQL SERVER中的锁.为了方便阅读给出系列文章的导读链 ...

  7. Expert 诊断优化系列------------------你的CPU高么?

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

  8. SQL语句调优三板斧

    改装有顺序------常开的爱车下手 你的系统中有成千上万的语句,那么优化语句从何入手呢 ? 当然是系统中运行最频繁,最核心的语句了.废话不多说,上例子: 这是一天的语句执行情况,里面柱状图表示的是对 ...

  9. SQL SERVER全面优化-------写出好语句是习惯

    前几篇文章已经从整体提供了诊断数据库的各个方面问题的基本思路...也许对你很有用,也许你觉得离自己太远.那么今天我们从语句的一些优化写法及一些简单优化方法做一个介绍.这对于很多开发人员来说还是很有用的 ...

随机推荐

  1. Android在layout xml中使用include

    Android include与merge标签使用详解 - shuqiaoniu的博客 - 博客频道 - CSDN.NEThttp://blog.csdn.net/shuqiaoniu/article ...

  2. MachineKey 操作 之 应用集群中SSO应用生成MachineKey

    MachineKey介绍 MachineKey其用于对 Forms 身份验证 Cookie 数据和视图状态数据进行加密和解密,一般情况下IIS自动默认给网站或者每一个应用生成唯一的MachineKey ...

  3. 解决谷歌浏览器中的input背景色默认是黄色

    input:-webkit-autofill { -webkit-box-shadow: 0 0 0px 1000px white inset !important; }

  4. 《UML大战需求分析》阅读随笔(六)

    在我们做的代码设计中分为系统设计和程序设计.程序设计是系统设计中模拟程序的执行逻辑,定义客户机服务器对象合作的框架的那个部分.程序和事务设计中,作者讲述到程序和事务设计将系统设计制品放在一起,并作为系 ...

  5. JAVA安装过程中出现的“javac不是内部或外部指令”的解决方法

    近来重新安装了JAVA,安装过程中出现问题,网上找到解决办法,汇总发布. 解决流程: 1.确定自己的环境变量设置没问题,没有出现遗漏 : . 等情况 (具体环境变量设置百度) 2.环境变量设置后 ,d ...

  6. 该不该在C#中使用var关键词

    作为一个并不勤快的程序猿,在项目开发过程中总是想尽办法少写代码,对var关键词的使用自然不会放过,几乎在每个能使用var的地方都用了var,对此,很多朋友同事给出了不同的建议,觉得能不使用var关键词 ...

  7. 时代杂志发文:2017 AR/MR将变得比VR更加重要

    每到年末都有很多企业或高管分析科技产业明年趋势.近日,时代杂志网页版刊登了2017年科技行业的五大趋势和热点话题的预测.该本作者TimBajarin,是硅谷市场研究公司CreativeStrategi ...

  8. ECF R9(632E) & FFT

    Description: 上一篇blog. Solution: 同样我们可以用fft来做...就像上次写的那道3-idoit一样,对a做k次卷积就好了. 同样有许多需要注意的地方:我们只是判断可行性, ...

  9. BZOJ4455: [Zjoi2016]小星星

    Description 小Y是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有n颗小星星,用m条彩色的细线串了起来,每条细 线连着两颗小星星.有一天她发现,她的饰品被破坏了,很多细线都被拆掉了.这 ...

  10. ORA-12560: TNS: 协议适配器错误

    解决方案: 在开始菜单搜索 services.msc,进入本地服务 将 OracleOraDb11g_home1ClrAgent,OracleOraDb11g_home1TNSListener,Ora ...