Kouhei Sutou
kou****@clear*****
2015年 9月 30日 (水) 22:47:32 JST
須藤です。 In <20150****@orega*****> "[groonga-dev,03528] PGRNファイルが開けない?" on Wed, 30 Sep 2015 15:02:07 +0900, 高見 直輝 <takam****@orega*****> wrote: > pgroonga 0.8.0の障害報告です。 ありがとうございます! > 【環境】 > Windows Server 2008R2 > postgresql-9.3.8-1 > pgroongaを利用したインデックスのあるテーブルに対してレコードの追加を行って > いたところ、ある時を境に以下のデータベースエラーが発生するようになりました。 > ERROR: 58030: pgroonga: failed to open database: <base/16384/pgrn>: [db][open] invalid keys table's type: 0 「ある時」にPostgreSQLを終了しないままWinodwsを再起動したり しませんでしたか?そういう場合、メモリー上にあるPGroongaのデー タがディスクに書き込まれないまま消えてしまうことがあります。 そうすると↑のようなエラーになります。 対策なんですが、明示的にディスクに書き込む指示を出してくださ い。指示は次のSQLを実行すると出せます。 SELECT pgroonga.command('io_flush'); これは、Groongaのio_flushというコマンドを実行するのですが、 このGroongaのコマンドを実行するとディスクに書き込みます。 http://groonga.org/ja/docs/reference/commands/io_flush.html インデックスの作成後に呼び出すようにすると、このエラーは発生 しないようになります。 > 次に、原因が判明済みのものを。 > 上記のエラーの調査のため、PGROONGAのログ設定を変更しました。 > ⇒ALTER DATABASEでpgroonga.log_levelを変更した。 > その後Postgreサービスを再起動したところ、上記のエラーではなく、コネクション > エラーが発生するようになりました。 > FATAL: 57P03: the database system is in recovery mode > これに関しては、pgrnファイルを排他ロックで開いた状態でログレベルの変更を行っ > たところ、再現できました。 > また、pgrnファイルを閉じた状態で再度変更を行ったところ正常に動作するように > なったことから、pgrnファイルの内容が不正な状態になったのが原因であると考え > られます。 これは、「invalid keys table's type: 0」のエラーがでるときだ け発生するものでしょうか?それともそうではないときでも発生す るものでしょうか? もし、そうではないときでも発生するものの場合、 > これに関しては、pgrnファイルを排他ロックで開いた状態でログレベルの変更を行っ > たところ、再現できました。 の具体的なSQLを教えてもらえないでしょうか? 試してみたいです。 -- 須藤 功平 <kou****@clear*****> 株式会社クリアコード <http://www.clear-code.com/> Groongaベースの全文検索システムを総合サポート: http://groonga.org/ja/support/ パッチ採用 - プログラミングが楽しい人向けの採用プロセス: http://www.clear-code.com/recruitment/ コードリーダー育成支援 - 自然とリーダブルコードを書くチームへ: http://www.clear-code.com/services/code-reader/