[groonga-dev,03876] Re: PGRNファイルが開けない?

Back to archive index

Kouhei Sutou kou****@clear*****
2016年 1月 28日 (木) 16:09:45 JST


須藤です。

In <20160****@orega*****>
  "[groonga-dev,03874] Re: PGRNファイルが開けない?" on Wed, 27 Jan 2016 08:40:14 +0900,
  高見 直輝 <takam****@orega*****> wrote:

>> ところどころに
>> 
>> > 2016-01-19 11:33:42.134000|e| syscall error 'base/16384/pgrn.000012F' (Permission denied)
>> 
>> というログがでているのですが、別にデータベースを開いているプ
>> ロセスがいたりしますか?
> 
> はい。InsertとSelectはそれぞれ別のプロセスから実行しています。

なるほど。それらのプロセスがファイルを開いているので削除でき
ないというエラーになるんですね。

> 現在、DEBUGを設定した状態にしています。
> 3〜5の期間のログを添付します。
> 5ではエラーになりませんでした。
>  ※%%を使って検索したが、pgroonga.logになにも出力されなかった
> なお、9:50の段階でPostgreSQLを停止しています。

ありがとうございます。
この部分ではおかしなところはありませんでした。

> その後、9:53に再起動をした後の経過を端的に。
> ・再起動直後(09:54:57まで)はInsertを実行してもエラーにならない
> ・09:55:07に、Insert文で以下のエラーが発生した。
>  42602: pgroonga: object isn't found: <Sources37356>
> 以後、Insert文&Select文いずれもエラーとなる。
> 
> pgroonga.logを確認したところ、09:55:02から『DDL:obj_remove ~』というログ
> が大量に出力されていました。
> 『Sources37356』についてのログも09:55:03に出力されていました。
> これだけだとobj_removeが行われているのが原因のように思えるのですが、どう
> なのでしょうか?

obj_remove()をするのはVACUUMのときだけなので、おそらく、
09:55くらいにAUTO VACUUMが走ったのだと思います。

PGroongaはVACUUMのときに無効なテーブルを削除します。おかしい
のは有効なテーブルも無効だと判断されているということです。
エラーメッセージに出ているSources37356はREINDEXのときに作ら
れている(提供してもらったログにでている)ので有効なテーブル
のはずです。

Sourcesのあとの「37356」がインデックスのID(PostgreSQLの中で
はOIDと呼ばれているもの)なんですが、PGroongaはVACUUMのとき
に「37356」が有効かどうかをチェックして無効ならその
SourcesXXXと関連する(Groongaの)テーブル・カラムを削除して
います。

有効化どうかのチェック方法は、たぶん、SQLでいうと

  SELECT * FROM pg_class WHERE oid = 37356;

に相当します。問題のデータベースで↑の結果がどうなるか教えて
もらえませんか?


レコードが存在しないなら想定外なんですが、たぶん、存在するん
ですよ。とすると、なんで無効扱いになっているかなんですけど、
なんでだろう。デバッガーで追えればすぐにわかりそうですが。。。


-- 
須藤 功平 <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/readable-code-workshop.html




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