2012年7月12日

MongoDB で Master/Slave 構成に Capped Collection を作ると Lock が 100% 付近に張り付いてレプリケーション遅延する問題

表題の通りなんですが、
MongoDB で Master/Slave 構成を作った時、
Capped Collection を作るとやたら遅延する問題というのがあります。

この問題はこちらでも話をされていて、作成した Capped Collection への処理が多いと、
それに引きずられるように遅くなっていくんですね。

で、これ本質的に何が問題かというと、
Cappled Collection の _id に対して Index が貼られるはずなんですが、
なぜか Slave の方にそれが波及せず、Index が貼られていない、という状況に陥るからです。
※起こらない事もあるので、
何をトリガーとしてこうなるのか分からないんですよね……。

いくら Capped Collection とはいえ、Index がない collection に大量のクエリを投げたら、
そりゃ遅くなりますよね、というお話。

【追記】
修正済のようなので、2.0.7/2.2.0 以降のバージョンでは起こらない問題です。

で、解決方法は、Slave を一旦停止して、Index を貼ってあげること。
以下手順




何で ReplicaSet じゃなくて Master/Slave 使ってんだよ、という話でもあるんですが、
そこはほら、過去の遺恨といいますか、いろいろありまして・・・。
comments powered by Disqus