2016-08-25 2 views
1

fillfactorをデフォルトの100%より低く設定すると、テーブルのHOT(ヒープのみのタプル)更新が可能になります。ただし、更新された列が索引の一部である場合は、HOT更新は不可能です。テーブルの更新は、常に索引付きの列に影響を与える場合はそうHOT更新が行われることはありません、これはpg_stat_all_tablesでテーブルに対してn_tup_hot_upd列を見ることで確認され、その後、このシナリオではフィルファクタを100%未満に設定する任意の利点がありますか?HOTアップデート以外にも、テーブルフィールファクタが低いのはなぜですか?

答えて

0

manualは全くFILLFACTOR理由としてHOT更新を言及していません。

fillfactorテーブルの(整数)

フィルファクタは10と100 100の間の割合(完全パッキング)がデフォルトです。小さいfillfactorが である場合、INSERT操作は表のページを指定された パーセントにのみパックします。各ページ上の残りのスペースは、そのページの 行を更新するために予約されています。これは、UPDATEに別のページにそれを置くよりも より効率的ですオリジナル、同じページ上の行の更新 コピーを配置する機会を与えてくれます。その エントリが更新されることはありませんテーブルでは、完全なパッキングが最良の選択ですが、 頻繁に更新されたテーブルに小さいfillfactorsが適切です。この パラメータはTOASTテーブルに設定できません。

行のpostgresを更新する(HOTまたはそれ以外)を使用されている方法に関係なく必要があり:他のトランザクションが、まだそれを読むことができるように

  • 新しい行を書く古い行をキープ古い行が古いとマークされていることを確認してください。だから、関係なく、HOTが使用されているかどうかの

。 postgresは、UPDATEの結果として、常に2行の書き込み/変更を行わなければなりません。これは2つではなく1つのページで行われると、より効率的になります。

+1

はい、私はマニュアルでそれを読みました。更新された行を同じページに配置することがHOTアップデートを参照しているかどうかはわかりませんでした。 HOTアップデートをしていなくても、Postgresは新しい行を同じページに配置するようです。私は、8.2のマニュアルのfillfactorと同じドキュメントを参照していますが、HOTは8.3で導入されています。 –

関連する問題