[groonga-dev,04127] Re: Pgroongaでレコード追加時にgrn_io_lock failed

Back to archive index

高見 直輝 takam****@orega*****
2016年 9月 15日 (木) 18:00:42 JST


高見です。

まず結果報告を。
インデックスファイル破損時の対応のみを行いました。
この結果、無事復旧しました。ありがとうございます。

以下、インラインにて。

> > 【状態】
> > サーバが不正な停止をしました。(イベントログに、“停止処理が行われないま
> > ま起動処理が実行された”というレコードが残っていた。)
> > おそらく、電源が寸断⇒再起動したのだと思われます。
> > これ以降、テーブルにレコードを追加(Insert文を実行)しようとすると、以下
> > のエラーが発生するようになりました。
> > ERROR: 58000: pgroonga: pgroonga: failed to set column value:grn_io_lock failed
> > 
> > この障害を解消するために以下の対応を行いましたが、状況は変わりません。
> > ・DBサービスの再起動
> > ・GROONGAのclearlockコマンドの実行
> >   select pgroonga.command('clearlock');
> >    →結果:True
> > ・pgroonga.lock_timeoutパラメーターの変更(60秒または1秒)
> >   元々の値は30秒
> >   このときのdebugログ(pgroonga.log)を添付します。
> 
> ありがとうございます。clearlockを実行した日時はわかりますか?
> 「2016-09-14 13:50:23.251000」よりも前ですか?そうだとすると、
> 全然ロックが解消されていませんね。。。↑の対応中はデータの更
> 新(INSERTやUPDATE)は止めていましたか?

clearlockを実行したのは、このログが出力される前です。
コマンド実行時は、テーブルデータへのアクセスは一切行っておりません。

> > あとは、PGROONGAのファイルを全て削除してインデックス再作成を実行する(イ
> > ンデックスファイルの破損時の対応)くらいしか思い付かないのですが、これで
> > 直る可能性はありますでしょうか?
> > これ以外の復旧方法の情報などありましたら、教えて下さい。
> 
> 試していないのですが、REINDEX + VACUUM FULLでもいけるかもし
> れません。
> 
> REINDEXをすることによりインデックスを再作成するのは↑の方法
> と同じです。インデックス再作成後にVACUUM FULLが走ると古いイ
> ンデックスを削除するのですが、それがロックがかかっているカラ
> ムを削除してくれそうな気がしています。削除中にもロックをとろ
> うとするとダメなのですが、とらなそうな気がするので、この方法
> でも復旧できそうな気がします。
> 
> ↑の対応と同じくらい時間がかかりそうなので、どっちもどっちか
> もしれません。

所要時間に大差が無い&復旧できるかどうか未知数な部分があるということで、
インデックス破損時の対応を行いました。

> あとは、PostgreSQLを終了して、↓を実行するというやり方でもい
> けるかもしれません。
> 
>   > grndb check C:\...\base\16384\pgrn
>   > grndb recover C:\...\base\16384\pgrn

残念ながら、grndbコマンドはRubyの実行環境を用意できなかったため試せませ
んでした。

> grndb recoverで自動復旧できないときは「インデックスファイル
> 破損時の対応」でなければいけません。

----------------------------- 
高見 直輝 <takam****@orega*****>
株式会社オレガ
TEL:03-3267-0150
FAX:03-3267-0180




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