Sql-Server
禁用索引的頁面級鎖定後的索引碎片問題
我有一個禁用頁面級鎖定的索引,現在我有該索引的索引碎片問題。
我知道我不能
Reorganize
索引,但我相信我能rebuild
索引。現在我認為重建也不起作用。我使用的預設填充因子為 100。我的數據庫很大,因此我不希望通過提供 80% 或更少的填充因子來增加表/數據庫的大小。通過不工作,我的意思是平均碎片在前一天晚上執行 Ola 的腳本後保持不變。
關於為什麼禁用頁面級鎖定的一些背景知識。
deadlocks
我在那個特定表中的這個索引上得到了很多交易。這張表有點像一個事實表,insert, update and delete
每時每刻都在發生。並且與其他一些表有一些foreign key
關係CASCADE deletes
。所以,我得到了很多鎖/死鎖,在禁用頁面級鎖之後,我能夠擺脫所有這些死鎖。我開始使用 Ola Hallengren 的腳本,
Index maintenance
並對 Index Reorganize 不起作用的所有索引應用 Index Rebuild。但我注意到索引重建也不起作用。現在,我看到索引的 AvgPageFragmentaiton 為 95.9413,頁數為 1196826,這並不好。
附加資訊:
我正在使用 Ola Hall 的腳本,如下所示。
EXECUTE dbo.IndexOptimize @Databases = 'DB_NAME', @FragmentationLow = NULL, @FragmentationMedium = 'INDEX_REORGANIZE,INDEX_REBUILD_ONLINE', @FragmentationHigh = ''INDEX_REORGANIZE,INDEX_REBUILD_ONLINE'', @FragmentationLevel1 = 5, @FragmentationLevel2 = 30, @SortInTempdb = 'Y', @MaxDOP = 0, @WaitAtLowPriorityMaxDuration = 0, @WaitAtLowPriorityAbortAfterWait= 'NONE', @Indexes = 'DB_NAME.[dbo].TB1,DB_NAME.[dbo].TB2'
我的問題是,如果為該索引禁用了頁面級鎖定,如何減少索引中的碎片?
您的查詢的答案隱藏在一些文件中:
當允許使用 MAX DOP > 1 和 ALLOW_PAGE_LOCKS = OFF 選項執行時,聯機索引重建可能會增加碎片。
其原因在以下 MSDN 博文中有詳細說明:
在您的情況下,為索引禁用頁面鎖定的一些解決問題的選項是:
- 離線重建
- 重建於
MAXDOP 1