Sql-Server

MS SQL 頁面拆分混淆

  • November 16, 2016

我對 MS SQL 中的頁面拆分有點困惑,我正在尋找一個明確的答案。這個故事似乎有兩個版本:

1 - Fillfactor 僅影響創建/重建索引時頁面的完整程度。頁面拆分始終為 50/50

2 - Fillfactor 也會影響頁面的拆分方式。因此,如果有 70% 的填充因子並且頁面溢出,它將拆分 70/30

非常感謝

來自線上圖書(強調我的):

FILLFACTOR =fillfactor 適用於:SQL Server 2008 到 SQL Server 2016,SQL 數據庫 V12。

指定一個百分比,該百分比指示數據庫引擎在索引創建或重建期間應該使每個索引頁的葉級別達到多少。fillfactor 必須是 1 到 100 之間的整數值。如果 fillfactor 為 100,則數據庫引擎會創建索引,並將葉頁填充到容量。

FILLFACTOR 設置僅在創建或重建索引時應用。數據庫引擎不會動態保留頁面中指定百分比的空白空間。要查看填充因子設置,請使用 sys.indexes 目錄視圖。

填充因子適用於葉頁。PAD_INDEX將確定非葉子頁面會發生什麼。從同一個 BoL 頁面:

PAD_INDEX = { 開 | 離開 }

ON 由 fillfactor 指定的可用空間百分比應用於索引的中間級別頁面。

未指定 OFF 或 fillfactor 中級頁面已填充到接近容量

頁面拆分可以發生在 BTree 的所有級別,包括根級別。然而,由於扇出,中間頁面拆分的頻率(通常)比葉子拆分的頻率低一個數量級。此外,非葉子頁面比葉子頁面少得多。因此,PAD_INDEX 比 FILLFACTOR 更受關注。仍然值得考慮,尤其是在隨機插入的索引上。

在寫入期間,頁面將被填充到 100%。然後他們將拆分 50/50,或盡可能接近以確保每一行完全包含在單個頁面上。我相信分裂總是50/50。然而,隨後的寫入可能會出現偏差,因此其中一個新頁面的填充速度比另一個快得多。

引用自:https://dba.stackexchange.com/questions/155252