これはPGroonga 2.X and 3.X用のドキュメントです。古いPGroongaを使っているならPGroonga 1.xのドキュメントを見てください。
pgroonga-primary-maintainer.sh
コマンド3.2.1で追加
PostgreSQL 15以上であればpgroonga_wal_resource_manager
モジュールをご利用ください。そのモジュールを利用するほうがより良い方法でおすすめです。
pgroonga-primary-maintainer.sh
コマンドはPGroongaのWALのサイズがしきい値を超えたインデックスに対して、REINDEX INDEX CONCURRENTLY
を実行します。
このコマンドを実行することで、WALが有効になっている(pgroonga.enable_wal = yes
が設定されている)プライマリーサーバーにおいてWALのサイズの肥大化を防ぐことができます。
注意:
このコマンドはプライマリーで動かすことを前提としているため、スタンバイでは実行しないでください。
このコマンドは定期実行することを前提としているため、pgroonga-generate-primary-maintainer-service.sh
マンドとpgroonga-generate-primary-maintainer-timer.sh
コマンドを使って定期実行の設定をしてください。
pgroonga-primary-maintainer.sh --threshold REINDEX_THRESHOLD_SIZE [--psql PSQL_COMMAND_PATH]
Options:
-t, --threshold:
If the specified value is exceeded, `REINDEX INDEX CONCURRENTLY` is run.
Specify by size.
Example: --threshold 10M, -t 1G
-c, --psql:
Specify the path to `psql` command.
-h, --help:
Display help text and exit.
Connection information such as `dbname` should be set in environment variables.
See also: https://www.postgresql.org/docs/current/libpq-envars.html
--threshold
オプション
REINDEX INDEX CONCURRENTLY
を実行するWALサイズのしきい値を指定します--psql
オプション
psql
コマンドのパスを指定します環境変数
DBへの接続情報などは環境変数で指定します
pgroonga-generate-primary-maintainer-service.sh
コマンドとpgroonga-generate-primary-maintainer-timer.sh
コマンドで定期実行の設定をした例です。
pgroonga-generate-primary-maintainer-service.sh
コマンドとpgroonga-generate-primary-maintainer-timer.sh
コマンドについてはリンク先を参照してください。
この例ではしきい値を --threshold 20K
で指定しました。これは last_block >= 2
のときにREINDEX
が動くサイズです。
CREATE TABLE notes (content text);
CREATE INDEX notes_index ON notes USING pgroonga (content);
INSERT INTO notes SELECT 'NOTES' FROM generate_series(1, 200);
DELETE FROM notes;
pgroonga_wal_status()
の結果を確認します:
SELECT name, last_block FROM pgroonga_wal_status();
name | last_block
-------------+------------
notes_index | 2
(1 row)
実行するSQL、REINDEX
の開始時間、 REINDEX
の終了時間を出力します。
$ grep pgroonga-primary-maintainer.sh /var/log/messages
...
Jul 4 00:39:26 example pgroonga-primary-maintainer.sh[84272]: Run 'REINDEX INDEX CONCURRENTLY notes_index'
Jul 4 00:39:26 example pgroonga-primary-maintainer.sh[84289]: Thu Jul 4 00:39:26 UTC 2024
Jul 4 00:39:26 example pgroonga-primary-maintainer.sh[84290]: REINDEX
Jul 4 00:39:26 example pgroonga-primary-maintainer.sh[84343]: Thu Jul 4 00:39:26 UTC 2024
...
複数のインデックスのWALのサイズがしきい値を超えていた場合は、シーケンシャルに REINDEX
を実行します。
pgroonga_wal_status()
の結果を確認します:
SELECT name, last_block FROM pgroonga_wal_status();
name | last_block
-------------+------------
notes_index | 1
(1 row)
出力はありません。