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

Back to archive index

Kouhei Sutou kou****@clear*****
2016年 9月 14日 (水) 16:50:34 JST


須藤です。

In <20160****@orega*****>
  "[groonga-dev,04123] Pgroongaでレコード追加時にgrn_io_lock failed" on Wed, 14 Sep 2016 16:14:53 +0900,
  高見 直輝 <takam****@orega*****> wrote:

> 【状態】
> サーバが不正な停止をしました。(イベントログに、“停止処理が行われないま
> ま起動処理が実行された”というレコードが残っていた。)
> おそらく、電源が寸断⇒再起動したのだと思われます。
> これ以降、テーブルにレコードを追加(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)は止めていましたか?

> あとは、PGROONGAのファイルを全て削除してインデックス再作成を実行する(イ
> ンデックスファイルの破損時の対応)くらいしか思い付かないのですが、これで
> 直る可能性はありますでしょうか?
> これ以外の復旧方法の情報などありましたら、教えて下さい。

試していないのですが、REINDEX + VACUUM FULLでもいけるかもし
れません。

REINDEXをすることによりインデックスを再作成するのは↑の方法
と同じです。インデックス再作成後にVACUUM FULLが走ると古いイ
ンデックスを削除するのですが、それがロックがかかっているカラ
ムを削除してくれそうな気がしています。削除中にもロックをとろ
うとするとダメなのですが、とらなそうな気がするので、この方法
でも復旧できそうな気がします。

↑の対応と同じくらい時間がかかりそうなので、どっちもどっちか
もしれません。

あとは、PostgreSQLを終了して、↓を実行するというやり方でもい
けるかもしれません。

  > grndb check C:\...\base\16384\pgrn
  > grndb recover C:\...\base\16384\pgrn

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


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

Groongaベースの全文検索システムを総合サポート:
  http://groonga.org/ja/support/
パッチ採用 - プログラミングが楽しい人向けの採用プロセス:
  http://www.clear-code.com/recruitment/
OSS開発支援サービス:
  http://www.clear-code.com/blog/2016/6/27.html




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