-
2021-05-07 PostgreSQL全文検索
PGroongaのオブジェクト紹介
はじめに
みなさん、こんにちは。インサイトの梅宮です。
今回のブログからPostgreSQLの全文検索高速化モジュールであるPGroongaについて、社内で検証した結果などを数回に分けてお伝えしていきたいと思います。
そして今回はその初回ということでPGroongaのオブジェクトについて紹介したい思います。
PGroongaのオブジェクトについて
PGroongaに関連するオブジェクトは以下の2つがあります。
- Groongaのオブジェクト
→Groongaテーブル・インデックス - PGroongaのWALファイル
この2つはPGroongaを使用・理解していく上で重要なオブジェクトとなっています。
Groongaのオブジェクト
Groongaはオープンソースのカラムストア機能付きの全文検索エンジンであり、このGroongaの機能をPostgreSQLに実装するのがPGroongaです。
インデックスメソッドにPGroongaを指定した CREATE INDEX を実行することで、Groongaオブジェクトが作成されます。
CREATE INDEX index_name ON table_name USING pgroonga (column_name);
PGroongaは作成されたGroongaのオブジェクトを利用して全文検索を行います。
以上の内容を整理して、本ブログ記事では混同を防ぐために
PGroongaインデックス = CREATE INDEX で指定した index_name に該当
PGroongaのインデックス = Groongaのオブジェクト
と呼称致します。
CREATE INDEX USING pgroonga; 実行時のイメージ図
PGroongaのWALファイルについて
PGroongaのWALファイルはpostgresql.conf 内で pgroonga.enable_wal = on とすることで作成されます。
PGroongaのWALファイルにはGroongaオブジェクトの情報が含まれているため、ストリーミングレプリケーション環境のスタンバイ側でも、PGroongaを利用した全文検索を実施する場合にはPGroongaのWALファイルが必要となります。
また、PGroongaのWALファイルは index_name のファイルノードに該当するファイル内に格納されます。
そのため、PGroongaのWALファイルのサイズは
$ psql
# \di+ index_name
で確認することができます。
PGroongaWALファイルの特徴
PGroongaのWALファイルは、PostgreSQLのWALと異なる特徴を持っています。
PGroongaWALファイルの削除について
PGroongaのWALファイルは自動で削除されません。
そのため、明示的にPGroongaのWALファイルを削除しない限り、ディスクを消費し続けることとなります。
PgroongaのWALファイルの削除方法に関しては次回のブログでご紹介したいと思います。
PGroongaWALファイルの適用について
GroongaのWALファイルには、『適用済み』と『未適用』の状態があります。
UPDATE や INSERT などの更新処理でPGroongaのWALファイルが作成されるのと同時に、PGroongaのWALファイルの適用処理が実行されますので、基本的にはPGroongaのWALファイルが『適用済み』か『未適用』かを気にする必要はありません。
ただ、ストリーミングレプリケーション環境のスタンバイ側では、マスタからレプリケーションされたPGroongaのWALファイルは『未適用』状態のままとなります。
PGroongaインデックスにアクセスする SELECT が実行された際に、初めてPGroongaのWALファイルの適用処理が実行されます。
このとき、PGroongaのWALファイルの適用処理が完了するまで、SELECTの結果が返されないことに注意する必要があります。
また、スタンバイ側で行われるPGroongaのWALファイルの適用処理は、高負荷などが原因でエラーとなってしまう場合があることも確認しています。
PGroongaのWALファイルの適応処理に関する詳細についても次回のブログで紹介させていただきます。
終わりに
以上がPGroongaに関するオブジェクトの紹介となります。
CREATE INDEX USING pgroonga; の内部動作を知っているのと知っていないのとでは実際の運用や環境の構築方法が大きく変わってきますし、ストリーミングレプリケーション環境を構築する際にはPGroongaのWALの仕組みに関しても考慮する必要があります。
そのため次回のブログ記事は今回ご紹介したPGroongaのオブジェクトのメンテナンス方法やメンテナンスに使用する関数、その内部動作についてご紹介したいと思います。
お問い合わせ
https://www.insight-ltd.co.jp/contact/