动态管理函数(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中国
作者
Baya Dewald,数据库咨询师,主要帮助客户用SQL Server和Analysis Services开发高可用的和升级应用软件。在他的职业生涯中,他负责过管理过数据库管理员团队等工作。Baya主要专攻领域有:性能调优、复制和数据仓储。你可以通过baya@bayasqlconsulting.com跟他联系。
翻译
相关推荐
-
云端SQL Server高可用性最佳做法
与内部部署相比,在云端运行SQL Server可为数据库软件用户提供更多的灵活性和可扩展性,也可能更省钱。但云 […]
-
绘制数据关系图的利器:SQL Server 图像数据库工具
SQL Server 2017新增了图形数据库功能,你可以使用图结构来表示不同数据元素之间的关系。
-
如何在Azure部署时选择合适的SQL Server?
想要在Azure上运行SQL Server,企业一般会面临两种选择:在Azure虚拟机上安装SQL Server或使用Azure SQL Database。
-
Linux支持的引入 推动了SQL Server 2016集成服务的发展
随着SQL Server的不断发展,集成服务也在发生相应的变化。在最新的SSIS更新中,增加Linux支持和SQL Server 2016升级向导。