myfinderの技術や周辺的活動のblog

2010年10月14日木曜日

Q4Mのデータファイルとcompactionの関係

Q4Mを運用していると、時折.Q4Mファイルがコンパクションされず肥大することがあります。
(コンパクションが実施されたかどうかはログに出るので、それを見て確認できます)
基本的にコンパクションは自動で実施されるので、通常の運用では.Q4Mファイルのサイズを気にする必要はないはずです。

コンパクションが自動で実施されなかった理由は今のところわかりませんが、バージョン 0.9.4 からは手動コンパクションが実装されており、割と Casual にコンパクションを実行する事ができるようになっています。
(0.9.2以前は concurrent compaction が実装されていないので、この話は 0.9.4 が対象です)

Q4M のコンパクションに関する設定は奥さんのBlogエントリにあるとおり、下記項目で設定します。


# enable / disable concurrent compaction (0: disabled (default), 1: enabled)
queue_use_concurrent_compaction=1

# handle INSERTs for every N bytes of data is compacted (default: 1048576)
queue_concurrent_compaction_interval=1048576


queue_concurrent_compaction_interval は、「指定された容量分コンパクションしたらその間の処理待ちINSERTを実行する」という動作のインターバルを指定するものです。(奥さんのエントリにもそう書いてあります)

Q4Mが必要になるシーンでは割と多くの接続&enqueueが実行されるものと思いますが、数万QPSとか行く環境だとINSERTのレイテンシがデフォルトの1MBだと問題になることがあるので、この値をデフォルトより小さくするのがよいようです。(数十KBとか)

そのようなレイテンシを許容できない環境であるならば、同じ設定のQ4Mを用意し、参照をそちらに向けてINSERTが走らない状態にしてからcompactionを実行するのが運用上は安全かなと思います。

0 件のコメント: