[pgsql-jp: 31708] バージョン7.2.2でユーザ表およびシステムインデックス破壊
    k-takemoto @ mvg.biglobe.ne.jp
    k-takemoto @ mvg.biglobe.ne.jp
       
    2003年 12月  4日 (木) 22:15:01 JST
    
    
  
ユーザ会の活動ご苦労様です。
武本と申します。
PostgreSQL 7.2.2を稼動しているシステムで2つのエラーが発生しました。
調べたところエラーの出力理由は分かったのですが、真の原因がはっきりしません。
PostgreSQL 7.2.3で全バックエンドがリスタートするバグが修正されていますが、
きっと、他の方々もバージョンアップできない状況にある方もいらっしゃると思います。
本メールがそのような方々の参考になることを祈ります。
また、同じような体験をされた方がいらっしゃいましたら、どのような時に発生したのか
教えていただければ幸いです。
順に説明します。
-------- * -------- * -------- * -------- * -------- * -------- * -------- * 
エラー1.「NOTICE: Rel foo: TID 318/27: OID IS INVALID. TUPGONE 0.」
 この時点では、foo表に対して検索値が一致するような検索は正常処理され
 ますが、全件検索をするとすべてのバックエンドおよびpostmasterがリスタート
 しました。
 また、foo表に対してpg_dumpを発行すると以下のエラーが発生しました。
  $ pg_dump -h localhost -t 'foo' dbname > backup.dmp
  pg_dump: ERROR:  MemoryContextAlloc: invalid request size 1953391976
  pg_dump: lost synchronization with server, resetting connection
  pg_dump: SQL command to dump the contents of table "foo" failed: PQendcopy(
  ) failed.
  ) failed.
 当方の認識では、以下の状況だと考えています。
 ・foo表の318ブロック目が壊れている。これは過去のVACUUM ANALYZE中に全
  バックエンドリスタートして壊した可能性がある(いつ壊れたか不明)。
 ・foo表の管理情報が壊れているため、pg_dumpに異常なサイズ値が渡されてしまう。
 当方では、対処として、foo表を直前のバックアップからリストアしました。
-------- * -------- * -------- * -------- * -------- * -------- * -------- * 
エラー2.「DEBUG:  FileClose: failed to close /usr/local/pgsql/base/
            34664823/16455: Bad file descriptor」
 システム運用中(INSERT/DELETEなどを持続的に実行)にいきなり上記メッセージが
 出力されました。
 その後、バックエンドが接続しようとすると以下のメッセージが出力されて、以降の
 新規接続ができなくなりました。
 NOTICE:  RelationBuildDesc: can't open pg_trigger_tgrelid_index:
      No such file or directory
 NOTICE:  cannot unlink 34664823/16455: No such file or directory
 前述のシステム表に付帯のインデックスが管理情報から焼失したようでした。
 当方では、対処として、システム表インデックスを再構築(REINDEX)しましたが、
 それでも直りきらなかったので、データベースを直前のダンプからリストアしました。
-------- * -------- * -------- * -------- * -------- * -------- * -------- * 
当方の本システムでは、PostgreSQL 7.2.2の設定ファイル postgresql.confの
ファイル同期モードを以下のように修正したところ、現在のところ再現はしていない
ようです。
 fsync = true  <---- falseから修正
 wal_sync_method = fsync  <--- open_syncから修正
PostgreSQL 7.2.2では(性能は落ちますが) fsync = trueにするのが良さそうですね。
------------------------
武本
k-takemoto @ mvg.biglobe.ne.jp
    
    
pgsql-jp メーリングリストの案内