我有一个禁用页面级锁定的索引,现在我有该索引的索引碎片问题。
我知道我不能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'
我的问题是,如果为该索引禁用了页面级锁定,如何减少索引中的碎片?
您的查询的答案隐藏在一些文档中:
其原因在以下 MSDN 博文中有详细说明:
工作原理:在线索引重建——可能导致碎片增加
在您的情况下,为索引禁用页面锁定的一些解决问题的选项是:
MAXDOP 1