[pgsql-jp: 41810] Re: PostgreSQL9.3でのclogファイル削除

Keiichi Sadanaga ksfore @ gmail.com
2015年 8月 7日 (金) 19:12:37 JST


高塚様

貞永です。

clogが消えた環境で、VACUUM FREEZEを行ったところ、この処理においても

ERROR: could not access status of transaction xxxxxxxx
Detail: Could not open file "pg_clog/xxxx": No such file or directory

(マスクしているところは最初のエラーと同じ値)

で止まってしまいました。
この状況になった場合、既知のバグにあてはまるものでしょうか。


次の手立てとして、clogファイルを作成で対応する方向で検討しております。

よろしくお願いいたします。

2015年8月7日 11:02 Keiichi Sadanaga <ksfore @ gmail.com>:
> 高塚様
>
> 貞永です。
> 回答有難うございます。
>
> バージョンは9.3.0になります。
>
> VACUUM FREEZEについてです。
> 私の方も無知で調べ始めているのですが、これはオンライン中に実行しても実行している処理には影響はないでしょうか?
>
> 問題ないようであれば、対応を検討したいと思います。
>
> よろしくお願いします。
>
>
>
> 2015年8月7日 10:48 TAKATSUKA Haruka <harukat @ postgresql.jp>:
>> 高塚と申します。
>>
>> 原因や仕組みについては割愛させていただきますが、いくつかコメントいたします。
>>
>> バージョン 9.3.x  の x はいくつでしょうか? 9.3.0 ということでしょうか。
>> http://www.sraoss.co.jp/technology/postgresql/9.3.2/ の 1番の障害に
>> する可能性があり、また、実行トランザクション数が2^31を超えていないなら、
>> まずは、
>>  ・全データベースを VACUUM FREEZE する
>> を試みるべきです。
>>
>> また、上記で直らないとして、当面対策としては、
>>  ・手で clogファイルを作る
>> で良いでしょう。
>>
>> 0x00 埋めだと未コミットの意味で、コミット済は 0x55 ('U') 埋め。いずれに
>> しても正しくない SELECT結果が生じる可能性は残りますが、とりあえず
>> ERROR になることは防げます。
>>
>> 機会をみて以下は行いたいところです。
>>  ・PostgreSQL 9.3.x 最新へのバージョンアップ
>>
>> pg_resetxlog が効果的であるか疑問です。不正なデータ状態を追放するために
>> 行うべきは、以下であろうかと思います。
>>  ・ダンプ、停止、$PGDATA退避、initdb、リストア、レプリケーション再構成
>>
>>
>>
>> On Fri, 7 Aug 2015 09:28:05 +0900
>> Keiichi Sadanaga <ksfore @ gmail.com> wrote:
>>
>>> 貞永と申します。
>>>
>>> PostgreSQL9.3, pgpool-ii 3.3.1を使用したLB+SRの環境にて、
>>>
>>> ERROR: could not access status of transaction xxxxxxxx
>>> Detail: Could not open file "pg_clog/xxxx": No such file or directory
>>> (一部マスク)
>>>
>>> というエラーが特定のテーブルへのselect時に発生しています。
>>> 調査すると、削除されたclogファイルは、clogの中でも一番古いファイルでした。
>>> DB全体は稼働しており、他への影響は今のところないようです。
>>>
>>> サイトを探してみると
>>> ddコマンドで0埋めたファイルを削除されたファイルとして作成すると回復するというのがいくつか見つかりました。
>>> (ex. http://www.postgresql.org/message-id/3756.1074890527@sss.pgh.pa.us)
>>>
>>> 他には、pg_resetxlogで回復するというのもありますが、DBの再起動が必要なので、躊躇しています。
>>>
>>> Postgresqlのバグで、トランザクション数が2^31を超えると起こりうるというのもありましたが、そこまで行っていませんでした。
>>>
>>> 今回のようなエラーが特定のテーブルへのselect時に発生する場合の対応は、上記のddで解消するものでしょうか。
>>> 最終的にはpg_resetxlogをすれば解消するものでしょうか。
>>> 本番環境なので、あまり試行はできないのですが、なるべく停止をせずに解消したいと思っています
>>>
>>> また、clogファイルが削除されるというのは、vacuumでの処理に伴うものでしょうか?(人手では削除していません)
>>>
>>> clogファイルがどのようなタイミングでどのような条件で削除されるのでしょうか。
>>>
>>> また、selectする際に過去のトランザクションがあるclogを見に行くのが、仕組み的にわかっていないですが、vacuumがされていない為でしょうか。autovacuumは有効になっています。
>>>
>>> 障害への対応方法と、障害の発生原因と考えられるものについて、ご教授していただきますようお願いいたします。
>>
>>
>> ______________________________________________________________________
>>  日本PostgreSQLユーザ会  高塚 遙  http://www.postgresql.jp
>>


pgsql-jp メーリングリストの案内