Fre*_*gen 5 sql-server sql-server-2016 enterprise-edition index-maintenance
我需要重建一些大索引,并且我正在使用ALTER INDEX
语句的各种选项(sort_in_tempdb、maxdop、online)对具有 4 个级别和叶级别的 800000 页的测试索引进行一些测试。
我注意到,当我使用Online=on
索引的中间页(级别 1)运行语句时,与以前一样碎片化程度更高(89% 而不是 3%)。
中间页只有在我设置MAXDOP=1
. 使用选项SORT_IN_TEMBP=ON,ONLINE=OFF
,级别 2 碎片从 0 跳到 100。
以下是导致级别 1 碎片增加的语句:
ALTER INDEX pk_test ON dbo.test REBUILD WITH (sort_in_tempdb=off,online=on,maxdop=1)
ALTER INDEX pk_test ON dbo.test REBUILD WITH (sort_in_tempdb=off,online=on)
ALTER INDEX pk_test ON dbo.test REBUILD WITH (sort_in_tempdb=on,online=on)
Run Code Online (Sandbox Code Playgroud)
此语句导致级别 2 上的碎片从 0 变为 100,但级别 1 保持不变:
ALTER INDEX pk_test ON dbo.test REBUILD WITH (sort_in_tempdb=on,online=off)
Run Code Online (Sandbox Code Playgroud)
中间页面上的碎片是否需要担心?是什么导致碎片增加?
尝试这个:
ALTER INDEX pk_test ON dbo.test REBUILD WITH (PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF,
SORT_IN_TEMPDB = ON,
ONLINE = ON,
ALLOW_ROW_LOCKS = OFF,
ALLOW_PAGE_LOCKS = OFF,
FILLFACTOR = 90,
OPTIMIZE_FOR_SEQUENTIAL_KEY = ON)
Run Code Online (Sandbox Code Playgroud)
这样,您的碎片率将达到FILLFACTOR
90%,并且您可能会避免表碎片再次激增。
请记住,您的表大小将增加 10%