[groonga-dev,03409] Re: PostgreSQLとgroongaのレコードの紐付けにctidを使うのは大丈夫なのでしょうか?

Back to archive index

Kouhei Sutou kou****@clear*****
2015年 8月 12日 (水) 22:31:29 JST


須藤です。

In <CAN-DUMTXae6PdP5GJ5082tuhoDoDXCWTmX+S_9meTE****@mail*****>
  "[groonga-dev,03407] Re: PostgreSQLとgroongaのレコードの紐付けにctidを使うのは大丈夫なのでしょうか?" on Wed, 12 Aug 2015 13:12:28 +0900,
  Hiroaki Nakamura <hnaka****@gmail*****> wrote:

> vacuum fullしたときにGroongaのテーブル名が変わって新しく作られるので
> いきなりGroongaのディスク消費量が倍になることがあるという認識でいます。
> 
> つまり、少なくとも今のGroongaのテーブルサイズと同じかそれ以上の
> 空きがないと危険だと考えていますが、この認識であっていますか?

はい、あっています。

ただ、VACUUM FULLが発生すると長時間ロックがかかってなにもで
きないので、実質的にサービスが止まることに注意してください。

現実的には↓にも書いている通り、VACUUM FULLが必要にならない
ように運用する方がよいかと思います。
  https://www.postgresql.jp/document/9.4/html/routine-vacuuming.html

> 運用のことを考えるとPostgreSQLを落とさずに古いファイルを消したいと
> 思います。今は参照されていないGroongaのテーブル名がわかれば、
> SQLからpgroonga.command()を使って消しても大丈夫なのでしょうか?

はい、それでも大丈夫です。

ただ、落としていない場合は、別の接続(=別のプロセス)から削
除したオブジェクトに触ってしまう可能性があることに注意してく
ださい。そうなると、無効なアドレスを触ることになるので、(そ
の接続だけですが)落ちたり、もしかしたらデータが壊れたりする
かもしれないので、十分注意してください。

たとえば、↓とすると↑の状況になる気がします。

  1. 接続1: pgroonga.command("table_list")
  2. 接続2: pgroonga.command("table_remove XXX")
  3. 接続1: pgroonga.command("table_list")


-- 
須藤 功平 <kou****@clear*****>
株式会社クリアコード <http://www.clear-code.com/>

Groongaベースの全文検索システムを総合サポート:
  http://groonga.org/ja/support/
パッチ採用 - プログラミングが楽しい人向けの採用プロセス:
  http://www.clear-code.com/recruitment/
コードリーダー育成支援 - 自然とリーダブルコードを書くチームへ:
  http://www.clear-code.com/services/code-reader/




groonga-dev メーリングリストの案内
Back to archive index