SQL Server表索引的填充因子選項是最常見的針對索引的一種調優方法。索引的填充因子是一個百分比,用于告訴SQL Server每個葉級索引頁可以填充多少索引數據,多少空間應該保留作為成長空間。如果基礎表的列被修改或列被添加或在表中添加數據時,那么就會發生擴展。隨著時間的推移索引碎片在增長,或者索引性能表現不佳,這是一個標志你可能需要調整最常用表的索引填充因子。問題是如何進行調整。
首先,你必須做的是避免發生這類狀況,手動設置一個實例級的填充因子,也就是說填充因子將影響給定SQL Server實例中的所有表。原因很簡單:每張SQL Server表都有自己的操作特性,有其自身的需要。填充因子默認設置為100% 。默認情況下,它可以隨時間調整就像調整數據庫性能一樣。
第二件要記住的事情:有可能在很多實例中不需要調整填充因子。對只有幾頁的索引不必費心(使用DBCC SHOWCONTIG命令可知),反正這些索引都會被緩存起來。首先確認索引的最大頁數和低掃描密度(使用DBCC SHOWCONTIG命令可知)。一個只有12頁和50%密度的索引所產生的問題要遠遠小于一個有7000頁和同樣密度的索引。
第三,要明確需要調整多大,應該向什么方向調整,因為沒有一個神奇數字可以滿足所有的需求。填充因子設置太高,就會浪費大量的空間以及被拆分成單頁。填充因子設置太低,數據庫大小的增加會導致大量的輸入/輸出操作從而影響性能。
Randal建議開始的時候把70%作為默認值使用一個星期左右,然后根據變化的結果向上或向下調整這個值。在這方面SQL Server性能計數器(sys.dm_os_performance_counters)Page Splits/sec就是一個很大的幫助;計數器值越高,越需要對SQL Server表索引進行調優。
也有人建議,填充因子的設置取決于有問題表的讀/寫率,低更新(頻繁讀)的表使用高填充因子,反之亦然。因此,填充因子值不應低于60%-70%,除非你有一些極不尋常的使用方案,一般情況下都是寫的數量級多于讀。
另一個建議是:如果只是將數據添加到表的末尾,那么填充因子不能設置為0或100%。根據我的經驗,追加方式操作的表通常受益于90%的填充因子,如果沒有大量的更新操作,只需要空出足夠的索引成長空間即可。
SQLTeam.com的Tara Kizer也談到填充因子的更改如何會降低SELECT的性能,以及任何更改填充因子的動作必須要有定期的數據庫性能審計。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
