K A
a_kira1****@hotma*****
2013年 8月 20日 (火) 22:59:45 JST
木村です。 まだ検証中ですが、途中経過をご報告します。何か思い当たる点があればアドバイスをお願いします。 別サーバーの確保が予算的にきつかったので、契約前の最後の悪あがきとして新規データベースdb_2を作り、旧データベースdb_1から全テーブルをダンプして、db_2へのインポートを行いました。 その上でuse db_2として、db_1で通らなかった「WHERE IN 多数」クエリを送ってみると、これがなぜか通ることが判明しました。 そこで、いったんサイトの主データベースをdb_2に変更し、1日放置(その間、cronによる自動更新処理なども実行)してみたところ、残念ながらcronによる処理中にエラーが再発していました。 状況を確認するため、シェルから「WHERE IN 多数」クエリを実行してみると、最初の1、2度は通ったので「あれ?」と思ったのですが、連続的に実行していくとエラーが生じ、繰り返すに連れて常時エラーという状態になっていきます。 これはインポート直後のdb_2では発生しなかった現象です。 ここに至って、 「インポート直後には正常なデータベースが、おそらくなんらかの更新処理が走った際に混乱を起こす状態になっている」 「その混乱は、mroonga導入後に付与した全文インデックスft_allに関係している可能性が高い」 という漠然とした仮説が浮かびました。 それに従って、試みにdb_2からft_allインデックスを消し、再付与してみたところ、「WHERE IN 多数」クエリが再度通るようになりました(連続実行しても問題なし)。 cronによる処理内容自体に問題があった可能性も疑って、シェルから直接実行もしてみましたが、処理自体も完走し、その後に「WHERE IN 多数」クエリを送っても通ってしまうので、やはりプログラム側の問題ではなかったように思えます。 これで仮説はおおむね確かめられたように思うんですが、肝心の「なぜそういった混乱が生じるのか」は謎のままなので、けっきょく別サーバーを借りるしかないか、と(ようやく)ハラをくくりつつあるのが今の段階です。 別サーバーの契約前にさらに試してみるべきこと、再度確認すべきログなど、お読みになって何か思い当たる点がありましたらアドバイスをどうぞよろしくお願いします。 反応がなければ明日か明後日にも別サーバー(VPS)を借りて検証作業を続けるつもりですm(_ _)m