原文:第七章——DMVs和DMFs(2)——用DMV和DMF监控索引性能

本文继续介绍使用DMO来监控,这次讲述的是监控索引性能。索引是提高查询性能的关键性手段。即使你的表上有合适的索引,你也要时时刻刻进行索引维护任务。

SQLServer有专门的DMO来显示索引相关统计信息。能帮助你分析现有索引的性能情况。通过这些DMO,可以做到:

Ø  检查索引使用模式

Ø  查找丢失索引

Ø  查找无用索引

Ø  查找索引碎片

Ø  分析索引页分配明细

本文将使用这些DMO来检查数据库的丢失索引,索引上的查找和扫描操作,并分析索引碎片是否有必要重组或重建。

准备工作:

下面的例子将演示如何通过DMO来找到丢失索引,丢失索引是不存在但创建后可以提高查询性能的索引。

同时可以看到如何查找索引使用明细和碎片明细,对索引维护工作很有帮助。

本文将使用SQLServer 2008R2和示例数据库AdventureWorks来演示。

步骤:

1、 
打开SSMS并连到SQLServer,选择AdventureWorks数据库。

2、 
在新窗口中输入以下代码:

USE AdventureWorks
GO
SELECT SalesOrderID ,
SalesOrderDetailID ,
OrderQty ,
ProductID
FROM Sales.SalesOrderDetail
WHERE ModifiedDate >= '2004-01-01 00:00:00.000'
GO SELECT SalesOrderDetailID ,
UnitPrice ,
UnitPriceDiscount
FROM Sales.SalesOrderDetail
WHERE ProductID = 921
GO

3、 
在另外一个窗口输入以下代码来查找缺失索引的情况:

SELECT  MID.statement AS ObjectName ,
MID.equality_columns ,
MID.inequality_columns ,
MID.included_columns ,
MIGS.avg_user_impact AS ExpectedPerformanceImprovement ,
( MIGS.user_seeks + MIGS.user_scans ) * MIGS.avg_total_user_cost
* MIGS.avg_user_impact AS PossibleImprovement
FROM sys.dm_db_missing_index_details AS MID
INNER JOIN sys.dm_db_missing_index_groups AS MIG ON MID.index_handle = MIG.index_handle
INNER JOIN sys.dm_db_missing_index_group_stats AS MIGS ON MIG.index_group_handle = MIGS.group_handle
GO

4、 
为了找到索引使用明细,输入以下代码:

USE AdventureWorks
GO
SELECT O.name AS ObjectName ,
I.name AS IndexName ,
IUS.user_seeks ,
IUS.user_scans ,
IUS.last_user_seek ,
IUS.last_user_scan
FROM sys.dm_db_index_usage_stats AS IUS
INNER JOIN sys.indexes AS I ON IUS.object_id = I.object_id
AND IUS.index_id = I.index_id
INNER JOIN sys.objects AS O ON IUS.object_id = O.object_id
GO

5、 
输入以下代码来查找索引碎片:

USE AdventureWorks
GO
SELECT O.name AS ObjectName ,
I.name AS IndexName ,
IPS.avg_page_space_used_in_percent AS AverageSpaceUsedInPages ,
IPS.avg_fragmentation_in_percent AS AverageFragmentation ,
IPS.fragment_count AS FragmentCount ,
suggestedIndexOperation = CASE WHEN IPS.avg_fragmentation_in_percent <= 30
THEN 'ReOrganize Index'
ELSE 'ReBuild Index'
END
FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'DETAILED')
AS IPS
INNER JOIN sys.indexes AS I ON IPS.index_id = I.index_id
AND IPS.object_id = I.object_id
INNER JOIN sys.objects AS O ON IPS.object_id = O.object_id
WHERE IPS.avg_fragmentation_in_percent > 5
ORDER BY AverageFragmentation DESC
GO

结果如下:

分析:

在本文中,首先在AdventureWorks库上的Sales.SalesOrderDetail表中做一些简单的查询,第一个查询是基于这个表的ModifiedDate,而第二个查询是基于ProductID。

SQLServer提供缺失索引的详细情况。缺失索引是指在数据库中不存在的索引,但是如果创建,查询将会得益并运行得更快。可以关联两个DMV,sys.dm_db_missing_index_groups和sys.dm_db_missing_index_group_stats。其中DMV,sys.dm_db_missing_index_groups_stats返回关于如果创建了缺失索引,将会对查询有多少可能性的提高的详细信息。注意从这个视图中查找的avg_user_impact列,这里间接地通过这列来和Sys.dm_db_missing_index_details与sys.dm_db_missing_index_groups关联。

和DTA(数据库优化引擎顾问)类似,DMV可能会建议广泛使用很多INCLUDE列在索引中。所以你不应该不顾一切把所有索引全部创建。因为这对你的DML操作可能会带来比较大的影响,如增删改等操作。

在第二个查询DMO中,返回了特定索引的查找和扫描数量。为了返回索引名称和对象名称,关联了sys.indexes和sys.objects这两个目录视图。

最后就是查找碎片,这里使用了DMF而不是DMV,sys.dm_db_index_physical_stats()函数。留意一下,这里使用了DB_ID()函数,因为希望得到当前数据库的所有索引信息,所以用这个函数即可。为了得到索引名和对象名,关联了sys.indexex和sys.objects目录视图。

扩充知识:

除了上面提到的DMO之外,还有两个有用的DMF来协助分析:

Ø 
Sys.dm_db_index_operational_stats

Ø 
Sys.dm_db_missing_index_columns

这两个DMF和之前提到的DMO的详细信息可查看联机丛书或者微软官网的说明。

第七章——DMVs和DMFs(2)——用DMV和DMF监控索引性能的更多相关文章

  1. 第七章——DMVs和DMFs(4)——用DMV和DMF监控磁盘IO

    原文:第七章--DMVs和DMFs(4)--用DMV和DMF监控磁盘IO 前言: 本文为本系列最后一篇,作为DBA,你必须经常关注磁盘的I/O问题,一旦出现问题,要尽快分析出是什么问题.SQLServ ...

  2. 第七章——DMVs和DMFs(3)——用DMV和DMF监控TempDB

    原文:第七章--DMVs和DMFs(3)--用DMV和DMF监控TempDB 前言: 我们都知道TempDB是SQLServer的系统数据库,且SQLServer的日常运作严重依赖这个库.因此,监控T ...

  3. 第七章——DMVs和DMFs(1)

    原文:第七章--DMVs和DMFs(1) 简介: 从SQLServer2005开始,微软引入了一个名叫DMO(动态管理对象)的新特性,DMO可以分为DMFs(Dynamic Manage Functi ...

  4. KnockoutJS 3.X API 第七章 其他技术(2) 使用扩展器来增加可观察量(监控属性)

    Knockout observables提供了支持读取/写入值并在值改变时通知订阅者所需的基本功能. 但在某些情况下,您可能希望向可观察者添加其他功能. 这可能包括通过在可观察者前面放置一个可写的计算 ...

  5. 精通Web Analytics 2.0 (9) 第七章:失败更快:爆发测试与实验的能量

    精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第七章:失败更快:爆发测试与实验的能量 欢迎来到实验和测试这个棒极了的世界! 如果Web拥有一个超越所有其他渠道的巨大优势,它就 ...

  6. 《Entity Framework 6 Recipes》中文翻译系列 (38) ------ 第七章 使用对象服务之动态创建连接字符串和从数据库读取模型

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第七章 使用对象服务 本章篇幅适中,对真实应用中的常见问题提供了切实可行的解决方案. ...

  7. 《Entity Framework 6 Recipes》中文翻译系列 (41) ------ 第七章 使用对象服务之标识关系中使用依赖实体与异步查询保存

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 7-7  标识关系中使用依赖实体 问题 你想在标识关系中插入,更新和删除一个依赖实体 ...

  8. Java语言程序设计(基础篇) 第七章 一维数组

    第七章 一维数组 7.2 数组的基础知识 1.一旦数组被创建,它的大小是固定的.使用一个数组引用变量,通过下标来访问数组中的元素. 2.数组是用来存储数据的集合,但是,通常我们会发现把数组看作一个存储 ...

  9. objective-c第七章课后练习2

    题:改变第七章例子中print方法,增加bool参数,判断如果是YES则对分数进行约简 @interface Fraction : NSObject { //int num,den; } @prope ...

随机推荐

  1. Android学习十九:ContentProvider初步

    一.Content Provider基本概念 1.ContentProvider为存储和获取数据提供了统一的接口.ContentProvide对数据进行封装.不用关心数据存储的细节.使用表的形式来组织 ...

  2. c语言推断数是否是素数

    这是推断数是否是素数.网络版非常.我觉得有点问题.今天一个朋友问我这个问题.我知道,今天,我把自己的代码,非常实用哦!. #include<stdio.h> #include<mat ...

  3. WPF界面设计技巧(11)-认知流文档 & 小议WPF的野心

    原文:WPF界面设计技巧(11)-认知流文档 & 小议WPF的野心 流文档是WPF中的一种独特的文档承载格式,它的书写和呈现方式都很像HTML,它也几乎具备了HTML的绝大多数优势,并提供了更 ...

  4. Driver 初始化顺序

    Linux系统使用两种方式去加载系统中的模块:动态和静态. 静态加载:将所有模块的程序编译到Linux内核中,由do_initcall函数加载 核心进程(/init/main.c)kernel_ini ...

  5. word2vec 中的数学原理具体解释(四)基于 Hierarchical Softmax 的模型

      word2vec 是 Google 于 2013 年开源推出的一个用于获取 word vector 的工具包,它简单.高效,因此引起了非常多人的关注.因为 word2vec 的作者 Tomas M ...

  6. LB 负载均衡的层次结构(转)

    作为后端应用的开发者,我们经常开发.调试.测试完我们的应用并发布到生产环境,用户就可以直接访问到我们的应用了.但对于互联网应用,在你的应用和用户之间还隔着一层低调的或厚或薄的负载均衡层软件,它们不显山 ...

  7. TNS-12541: TNS:no listener TNS-12560: TNS:protocol adapter error TNS-00511: No listener Linux Error:

    今天是2014-06-17.遇到一个很奇怪的问题,可能之前測试改动监听的原因,导致监听启动后自己主动关闭,特此记录一下整个处理过程, 监听配置文件信息例如以下: [oracle@dg1 admin]$ ...

  8. 大页(huge pages) 三大系列 ---计算大页配置参数

    使用以下shell 脚本来计算大页配置参数,确保使用脚本实例之前的数据已经开始, 如果数据库的版本号11g,确认是否使用自己主动的内存管理(AMM) +++++++++++++++++++++++++ ...

  9. 经典排序算法 - 高速排序Quick sort

    经典排序算法 - 高速排序Quick sort 原理,通过一趟扫描将要排序的数据切割成独立的两部分,当中一部分的全部数据都比另外一部分的全部数据都要小,然后再按此方法对这两部分数据分别进行高速排序,整 ...

  10. 怎么样MyEclipse配置Tomcat?

    1.下载tomcat免安装版.tomcat路径不包含空格 http://download.csdn.net/detail/u014112584/7549191 2.windows -preferenc ...