2016-08-25 36 views
1

設置低於默認值100%的填充因子允許在桌上進行HOT(堆僅堆)更新。但是,如果更新的列是索引的一部分,則可能無法進行HOT更新。如果表上的更新總是影響索引列,那麼HOT更新永遠不會發生,並且通過查看pg_stat_all_tables中的表的n_tup_hot_upd列來確認,那麼在此場景中設置小於100%的fillfactor是否有任何好處?除了HOT更新以外,還有一個低表fillfactor的好處?

回答

0

manual根本沒有提到HOT更新作爲填充因子的原因。

fillfactor(整數)

爲表的填充係數是10和100。100(完整填料)之間的百分比是默認的。當指定較小的填充因子爲 時,INSERT操作僅將表格頁面打包到指示的 百分比;每個頁面上的剩餘空間保留用於更新該頁面上的 行。這使UPDATE有機會將更新後的 副本放置在與原始頁面相同的頁面上,這比將其放置在不同的頁面上更有效率,因爲 效率更高。對於其中 條目從未更新的表格,完整打包是最佳選擇,但在 中,重新更新的表格中較小的填充因子是適當的。這個 參數不能爲TOAST表設置。

無論使用哪種方法(熱或其他方式)更新的行Postgres的需要:

  • 寫入新行
  • 保留舊行,這樣其他事務仍然可以讀取它,但確保舊行標記爲舊。

所以不管是否使用HOT,由於UPDATE的結果,postgres必須總是寫/更改兩行。如果在一頁而不是兩頁上完成,這將會更加高效。

+1

是的,我在手冊中看過。我不確定是否將更新的行放在同一頁面上是指HOT更新。看起來Postgres會將新行放在同一頁面上,即使它沒有進行HOT更新。我在8.2手冊中看到了關於填充因子的相同文檔,而在8.3中引入了HOT,這樣纔有意義。 –

相關問題