iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 17
0
自我挑戰組

IT人員面面觀系列 第 16

Index調教的三兩事Part 2

  • 分享至 

  • xImage
  •  

昨天介紹了查看索引的使用情況來決定那些索引是否需要被保留,

由於現今交易頻繁的OLTP環境中,每日經常有許多資料被異動會造成索引的不連續性

將會增加搜尋特定資料的時間,

因此今天則是要介紹DMV來找出索引破碎程度,再決定是否需要重組或重建索引。

找出指定資料庫的所有索引破碎程度

USE AdventureWorks2008;  
GO  
SELECT OBJECT_NAME(dt.object_id),si.name,dt.avg_fragmentation_in_percent,dt.avg_page_space_used_in_percent
FROM
       (SELECT object_id,index_id,avg_fragmentation_in_percent,avg_page_space_used_in_percent
       FROM    sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, 'DETAILED')
       WHERE   index_id <> 0
       ) AS dt 
       INNER JOIN sys.indexes si
       ON     si.object_id = dt.object_id
          AND si.index_id  = dt.index_id

https://ithelp.ithome.com.tw/upload/images/20181017/20107408PivHDfIbaa.jpg

微軟的官方主件建議avg_fragmentation_in_percent的值,

大於5%且小於等於30%時,使用重組成本較低的ALTER INDEX REORGANIZE敍述,

大於30%時,則是使用重建成本和時間較高的ALTER INDEX REBUILD敍述。

以上範例:

找出IX_ProductReview_ProductID_Name的avg_fragmentation_in_percent值為66.666,

故需要設定排程定期重新Rebuild Index。

USE AdventureWorks2008;
GO
ALTER INDEX IX_ProductReview_ProductID_Name ON Production.ProductReview
REBUILD;
GO

因為在重建索引時,該索引會被鎖定且不能被讀取的,

只有企業版才能支援線上索引重建的功能。

注意:在重建大型索引時需注意Log將會同步大量新增,

需適時的Shrink或備份Log檔,好讓Log檔Size縮小


上一篇
Index調教的三兩事
下一篇
PM心得
系列文
IT人員面面觀28
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言