用动态管理视图监控和调整SQL Server性能(三)

日期: 2009-02-11 作者:Baya Dewald翻译:April 来源:TechTarget中国 英文

sys.dm_db_missing_index_details DMV返回数据库标识符、对象标识符和缺失索引列。这些列通过等式、不等式和涵盖列进行分类。DMV能够和sys.dm_db_missing_index_columns将创建缺失索引的语句放在一起。单个缺失索引的所有数据返回到单个行中,这和sys.dm_db_missing_index_colum函数不一样,sys.dm_db_missing_index_colum函数是将数据分别返回到行每个行中。

  例如,以下查询连接缺失索引动态管理视图,发现最有用的索引和创建索引的方法为: SELECT  avg_user_impact……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

sys.dm_db_missing_index_details DMV返回数据库标识符、对象标识符和缺失索引列。这些列通过等式、不等式和涵盖列进行分类。DMV能够和sys.dm_db_missing_index_columns将创建缺失索引的语句放在一起。单个缺失索引的所有数据返回到单个行中,这和sys.dm_db_missing_index_colum函数不一样,sys.dm_db_missing_index_colum函数是将数据分别返回到行每个行中。

  例如,以下查询连接缺失索引动态管理视图,发现最有用的索引和创建索引的方法为:


SELECT 
avg_user_impact AS average_improvement_percentage, 
avg_total_user_cost AS average_cost_of_query_without_missing_index, 
'CREATE INDEX ix_' + [statement] + 
ISNULL(equality_columns, '_') +
ISNULL(inequality_columns, '_') + ' ON ' + [statement] + 
' (' + ISNULL(equality_columns, ' ') + 
ISNULL(inequality_columns, ' ') + ')' + 
ISNULL(' INCLUDE (' + included_columns + ')', '') 
AS create_missing_index_command
FROM sys.dm_db_missing_index_details a INNER JOIN 
sys.dm_db_missing_index_groups b ON a.index_handle = b.index_handle
INNER JOIN sys.dm_db_missing_index_group_stats c ON 
b.index_group_handle = c.group_handle
WHERE avg_user_impact > = 40

  单个索引的结果:

  

average improvement percentage

46.34

average cost of query without missing index

20.51871252

create missing index command

CREATE INDEX
ix_[AdventureWorksDW].[dbo].[FactCurrencyRate]_[TimeKey]
ON [AdventureWorksDW].[dbo].[FactCurrencyRate] ( [TimeKey]) INCLUDE ([CurrencyKey], [AverageRate], [EndOfDayRate], [full_date])

  虽然用户能够修改性能提高的百分比,但以上查询返回所有能够将性能提高40%或更高的索引。索引名称格式化还能够根据你的命名规范(naming convention)进行修改。

  可能会事与愿违,sys.dm_db_missing_index_details DMV的"statement"列返回的是用来创建缺失索引的对象。对象返回格式为DatabaseName.OwnerName.ObjectName。有意思的是,DMV还返回数据库标识符和对象标识符列,所以你还能够通过对返回列申请DB_NAME()和OBJECT_NAME()函数推断对象名称。

  注意,由于SQL Server最后才启动,缺失索引动态管理视图只表示能够对查询有好处的索引数据。这就是说每次你重启SQL Server时,所有缺失索引信息就都丢了。如果你想载很长一段时间内收集并检测同样的数据,你可以复制用户表每个动态管理视图的内容。

  对数据库管理员来说,缺失索引特性是一种性能调整工具。但是它还不时一个十全十美的解决方案。管理员还要检测缺失索引DMV的内容并仔细考虑创建推荐索引的成本和好处。如果你的查询包括等式或不等式操作的多个列,例如缺失索引特性不能提供CREATE INDEX语句的列顺序。你需要检测受益于缺失索引的查询并决定索引键的顺序,这样每个索引的效能就会有很大的差异。

  最后,考虑到索引能够加快SELECT查询速度的同时,它还会对INSERT、UPDATE以及DELETE语句造成负面的影响。这是因为随着表中数据的不断增加、更改和清除,SQL Server必须用内存来维护索引键。更多有关缺失索引特性局限性的信息,请查询SQL Server 2008 Books Online。

作者

Baya Dewald
Baya Dewald

Baya Dewald,数据库咨询师,主要帮助客户用SQL Server和Analysis Services开发高可用的和升级应用软件。在他的职业生涯中,他负责过管理过数据库管理员团队等工作。Baya主要专攻领域有:性能调优、复制和数据仓储。你可以通过baya@bayasqlconsulting.com跟他联系。

翻译

April
April

相关推荐