PostgreSQL 9.4 GINインデックスサイズの件(日本語全文検索編)

昨日、SRA OSS.さんが公開したPostgreSQL 9.4検証のレポート
PostgreSQL 9.4 検証報告 - SRA OSS, Inc. 日本支社
を読んで、GINインデックスサイズの大幅な削減結果に驚いたわけなんだけど、じゃあ、日本語全文検索で使われるGINインデクスだと、どのくらいの効果があるものかしらんと思い、手元の環境で簡単に実験してみた。

測定環境

  • ホストOS:Let's note CF-SX2(メモリ8GB、SSDモデル)
  • ゲストOS:CentOS 6.3
  • PostgreSQL
    • 9.3.4 ソースビルド版(-gオプションつき)
    • 9.4-beta2 ソースビルド版(-gオプションつき)
  • 全文検索モジュール
    • textserach_ja(ビルド/インスコできるように若干修正)
    • pg_bigm-1.1
  • PostgreSQLチューニングはほぼデフォルトw
    • shared_buffer = 128MB
    • maintenance_work_mem
      • 9.3 : 16MB(デフォルト)
      • 9.4-beta2 : 64MB(デフォルト)
    • checkpoint_segments = 3

測定対象

測定結果

インデックスサイズ

インデックスサイズはpg_indexes_size()で計測。

インデックスサイズに関してはtextsearch_jaとpg_bigmで大きく傾向が異なる。
たぶん、textsearch_jaでは形態素解析によって得られる名詞句等しかインデックス化の対象にしないから、それなりに重複度が高くなり、それ故PostgreSQL 9.4でのGINインデクスサイズ削減効果が効いてくるのかも。
逆にpg_bigmのようなN-gramかつ日本語の場合には、個々のbi-gramの重複度が低いのでそれほど削減効果が見えないのかもなあ。

インデックス作成時間

ちょっと気になったのはインデックス作成時間。
もちろん手元のVM上かつ一発計測なので数値は参考程度ではあるけど、日本語全文検索GINインデクスの場合、9.3よりも9.4-betaのほうが遅くなっている!
GINインデックス削減のために重複排除等を何かやってるのかもしれないけど、それのオーバヘッドが結構重たいのかしらん。

とか、書くときっとJPUGの凄い人たちから何かしらコメントが来るに違いないw