-
2021-07-08 PostgreSQL全文検索
PGroongaオブジェクトのメンテナンス方法
はじめに
みなさん、こんにちは、インサイトの梅宮です。
前回のブログではPGroongaのオブジェクトを紹介しました。
今回はその内容を踏まえて、PGroongaオブジェクトのメンテナンス方法や使用する関数についてご紹介したいと思います。
PGroongaオブジェクトの削除
前回のブログ記事でも触れましたが、PGroongaのWALファイルは明示的に削除しなければ増加し続けることになります。
PGroongaのWALファイルを明示的に削除するには、専用の関数を利用する必要があります。
pgroonga_wal_truncate 関数
pgroonga_wal_truncate関数を実行することで、PGroongaのWALファイルが削除されます。
この関数を実行した際には、「未適用」状態のPGroongaのWALであっても削除されることになりますのでご注意ください。
もし「未適用」状態のPGroongaのWALファイルを削除してしまった場合、Groongaのオブジェクトの整合性が崩れることにより、PGroongaインデックスを利用した全文検索の結果が不正なものとなる可能性があります。
また、公式のドキュメントにも記載されていますが、 pgroonga_wal_truncate 関数でPGroongaのWALファイルを削除しても、ディスクの開放は行われません。
PGroongaのWALファイルが削除されたことで発生する空き領域は、新たに作成されるPGroongaのWALファイルを格納されるために再利用されます。
そのため、OSから見たディスクの空き容量は増えません。
pgroonga_wal_truncate関数のイメージ図
pgroonga_vacuum 関数
pgroonga_vacuum 関数を実行することで、内部的に不要なPGroongaのオブジェクトやPGroongaのWALファイルが削除され、ディスク領域はOSヘ開放されます。
つまり、OSから見たディスクの空き領域が増えます。
また下記の操作を行うことにより、GroongaのオブジェクトやPGroongaのWALファイルを内部的に不要な状態とすることができます。
- PGroongaインデックスに対する、DROP INDEX 、 REINDEX INDEX
- PGroongaインデックスが含まれるテーブルに対する、DROP TABLE 、 TRUNCATE TABLE
pgroonga_vacuum関数実行時のイメージ図
PostgreSQLのVACUUMとpgroonga_vacuum関数について
PostgreSQLのVACUUM処理が発生した際には、内部的にpgroonga_vacuum関数と同様の処理が行われています。
ただし、ストリーミングレプリケーション環境を構築している場合は、PostgreSQLのVACUUM処理の際に、スタンバイ側に存在する不要となったGroongaのオブジェクトは削除されないため注意が必要です。
そのため、スタンバイ側では定期的にpgroonga_vacuum関数を実行して、不要となったGroongaのオブジェクトを削除する必要があります。
定期的な削除をしない場合、スタンバイ側のディスク消費量のみが増加し続けることになります。
ストリーミングレプリケーション環境での注意点
前回のブログ記事でも説明していますが、ストリーミングレプリケーション環境のスタンバイ側が高負荷な状態になっていると、マスタ側で行ったREINDEX INDEXなどを契機にPGroongaのオブジェクトの整合性が崩れる場合がありますのでご注意ください。
これらの注意事項の回避策や、PGroongaを導入したストリーミングレプリケーション環境の構築方法などについては次回以降のブログ記事でご紹介したいと思います。
お問い合わせ
https://www.insight-ltd.co.jp/contact/
関連記事
PostgreSQLで全文検索 PGroongaとpg_bigmの性能比較
PGroongaの設定値チューニング
PGroongaのオブジェクト紹介