利用动态管理视图提高SQL Server索引效率(二)

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

动态管理函数(DMF)和分片索引(fragmented indexes)

数据更改会造成索引分段,高级别的分片还会减少索引的效率。结果,SQL Server就不得不去扫描更多的索引页,甚至在用到索引时查询会变得越来越慢。为避免分片的负面影响,DBA可以重建或对索引消除碎化。在SQL Server之前的版本中,你不得不用到DBCC SHOWCONTIG 语句获取索引分片级别。这个语句还有WITH TABLERESULTS这个选项,它返回的结果表格形式、有序结果。

你可以想象,在一个有成千上万个表的数据库中检测每个索引肯定是一件很枯燥的工作。更不用说手动执行这项任务就等于是浪费数据库管理员的时间了。相反,许多DBA都实施了一个自动解决方案,这个解决方案上带有临时表、并且得到的结果为 DBCC SHOWCONTIG。然后,你就可以根据索引的分片级别对索引进行重建或消除碎化。

然是,这种方法已经过时了。虽然DBCC SHOWCONTIG仍然在SQL Server 2005或2008里还存在,你还是应该用sys.dm_db_index_physical_stats动态管理函数(DMF)。DBCC SHOWCONTIG不支持最新版本中的新索引特征,可能不久就会被清除掉。

有了sys.dm_db_index_physical_stats,你就不在需要创建临时表存储结果了。相反你可以在指定的时间内在定义列中用到最新的分片级别,DMF的句法如下:


Sys.dm_db_index_physical_stats (
{database_id | NULL | DEFAULT | 0},
{object_id | NULL | DEFAULT | 0}, 
{index_id  | NULL | 0 | -1 | DEFAULT}, 
{partition_number | NULL | 0 | DEFAULT}, 
 {mode | DEFAULT | NULL}  )

你能够在SQL Server联机丛书上找到每个字段的详细说明。注意在指定DMF的字段时,你可以用db_id()和object_id()这两个系统函数。

以下查询返回所有数据库所有索引的分片信息:


SELECT * FROM sys.dm_db_index_physical_stats(NULL, NULL, NULL, NULL, NULL)

第二个语句返回特定对象所有索引的索引分片级别:


SELECT * FROM sys.dm_db_index_physical_stats(6, 469576711, NULL, NULL, NULL)

你会得到如下结果:


database_id  object_id  index_id  partition_number
6  469576711  1  1
6  469576711  1  1
index_type_desc  alloc_unit_type_desc  index_depth
CLUSTERED INDEX  IN_ROW_DATA  3
CLUSTERED INDEX  LOB_DATA  1
index_level  avg_fragmentation_in_percent  fragment_count
0  0.592592593  87
0  0  NULL
avg_fragment_size_in_pages  page_count
7.75862069  675
NULL  8396
avg_page_space_used_in_percent  record_count
NULL  NULL
NULL  NULL
ghost_record_count  version_ghost_record_count
NULL  NULL
NULL  NULL
min_record_size_in_bytes  max_record_size_in_bytes
NULL  NULL
NULL  NULL
avg_record_size_in_bytes  forwarded_record_count
NULL  NULL
NULL  NULL

尽管得到的结果很庞大,该DMF还是只允许你检索你感兴趣的这些列。这是DBCC SHOWCONTIG的另一种更新,它不允许你检索这些列的子集。

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

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

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

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

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

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

作者

Baya Dewald
Baya Dewald

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

翻译

April
April

相关推荐