高見 直輝
takam****@orega*****
2016年 2月 2日 (火) 18:36:15 JST
高見です。 > > autovacuum = offにした状態で確認したところ、ANALYZEがトリガであることが > > 判明しました。 > > ありがとうございます! > ANALYZEは内部的にVACUUMと処理を共有しているので、ANALYZEが実 > 行されたらPGroongaのファイルが消えても(VACUUMのときと同じよ > うな動きになっても)おかしくないです。 > > > ※InsertとSelectでは発生しないことを確認。 > > 以下の処理を行い、再現することを確認しました。 > > 1.pgrn*ファイルの削除 > > 2.REINDEX実行 > > 3.ANALYZE実行 > > この後、数分以内にobj_removeが実行され始めます。 > > 念のため↓について確認させてください。 > > > オブジェクトが残っている状態でpg_classからデータが消えるという状況がよく > > 分かっていないのですが、上記手順における、REINDEXの実行後とANALYZEの実行 > > 後(obj_removeの完了後)でpg_classの内容を比較しました。 > > その結果、PGroongaのインデックスのレコード数並びに内容に変化はありません > > でした。 > > pg_classの内容取得に使用したSQLは以下の通り。 > > select oid, * from pg_class; > > 1.の後に > > select oid, * from pg_class; > > を実行するとPGroongaを使ったインデックスの名前は存在していま > すか? > (私は存在しているのだと思っています。) 存在しています。 > 念のため確認方法を書くと。。。 > relnameにインデックス名が入っているはずなので、それで確認で > きます。また、そのときのoidも記録しておいてください。REINDEX > 実行時にPGroongaのログに残る「SourcesXXX」のXXXと同じかを確 > 認したいからです。 > > > 次に、2.の後に > > select oid, * from pg_class; > > を実行するとPGroongaを使ったインデックスの名前は存在していま > すか? > (内容は変わっていないということなので存在しているのだと思っ > ています。) 存在しています。 > また、2.のときにPGroongaのログに残る「SourcesXXX」のXXXと↑ > で確認したoidは同じですか? > (同じなんだと思っています。) これは違っていました。 ログ:38061 、 OID:16711 > 最後に、3.の後に > > select oid, * from pg_class; > > を実行するとPGroongaを使ったインデックスの名前は存在していま > すか? > (内容は変わっていないということなので、ここでも存在している > のだと思っています。) 存在しています。 念のため、ログとOIDについても調べました。 ログ:39522(変化有り) 、 OID:16711(変化無し) > ↑(...)の中に書いた予想通りだと想定外の状態なので、手元で > 動かせないとどうにもできなそうです。もし、そういう状態なら公 > 開できるSQLで再現させてもらえないでしょうか? 他のPCで電源断以外、ほぼ同等構成で確認したのですが、再現しませんでした。 ※電源断は怖いので試せません・・・。 問題の環境も、エラーが発生しはじめたのがPCの電源断からなので、SQLの実行 だけで状況を再現するのは難しい、というか、こちらでも実現できていない状況 です。 正常に稼動している環境で上記の手順で確認したところ、以下の挙動になりました。 ・REINDEXによってpg_classのOIDに変化は見られなかった ・「SourcesXXX」のXXXは、当初pg_classのOIDであったが、REINDEX実行後は pg_classのrelfilenodeの値がセットされる この挙動自体は正しいのでしょうか? これが間違っている場合、DB構築手順やpg_confの内容に原因がある可能性はあ りますでしょうか? なお、問題が発生している環境では、relfilenodeの値もSourcesの値と一致しま せんでした。但し、数値は近くなっています。 ログ:39522 、 relfilenode:38738 ----------------------------- 高見 直輝 <takam****@orega*****> 株式会社オレガ TEL:03-3267-0150 FAX:03-3267-0180