Tihiroの頭を休めるIT教室

少しだけ頭使って後は根性

テーブルごとにAUTO_VACUUMおよびAUTO_ANALYZEをする閾値を設定する。

概要

PostgreSQLではautovacuumとかautoanalyzeについて、決められた閾値を超えた場合に実行されるという仕組みになっています。 その閾値をテーブルごとに設定してみましょう。というお話です。

確認したのは

です。

閾値と計算式

autovacuum_vacuum_threshold + autovacuum_vacuum_scale_factor * テーブルの有効行数(pg_stat_user_tables.n_live_tup) > テーブルの廃止行数(pg_stat_user_tables.n_dead_tup)

となります。例えば、有効行数の10%を廃止行数が超えたら、自動的にVACUUMさせたいって場合は

  • autovacuum_vacuum_threshold = 0
  • autovacuum_vacuum_scale_factor = 10

にすれば良いわけですね。

設定してみる。

ALTER TABLE {table_name} SET (autovacuum_vacuum_threshold = 0);
ALTER TABLE {table_name} SET (autovacuum_vacuum_scale_factor = 10);

こんな感じです。ちなみにこれらを格納パラメータというみたいです。CREATE TABLEでテーブル作成時にも指定できるようですが、若干複雑なのでALTER TABLEで済ませてしまいます。

設定されたか確認してみる。

SELECT reloptions FROM pg_class WHERE relname = {table_name}

これで格納パラメータを確認できます。設定した値が、結果に表示されていれば問題ありません。

まとめ

廃止行のことを何と呼ぶのか調べてたら「ガベージ行」とかいう呼び方が一般的?