[pgsql-jp: 40404] Re: AUTOVACUUMと手動VACUUMの同時実行
Kei SUGIMOTO
kei.wings @ gmail.com
2010年 9月 17日 (金) 16:38:48 JST
Itagaki様
下記ご回答誠にありがとうございます。
2010年9月14日14:43 Itagaki Takahiro <itagaki.takahiro @ gmail.com>:
> 2010/9/13 Kei SUGIMOTO <kei.wings @ gmail.com>:
>> 特定テーブルがVACUUM(AUTOVACUUM)中に、そのテーブルにUPDATE処理を実施した際に
>> 処理待ち状態となってしまいました。
>
> 確かに、VACUUMのゴミ取りの間は競合するようなロックはかからないのですが、
> VACUUMの最終ステップで行われる、テーブルファイルの末尾の切り詰め処理で
> 排他ロックが取得される場合があります。これにぶつかったのかもしれません。
>
そういう状況になることがあるのですね。
> 特に 8.1 等の古いバージョンだと、vacuum cost delay を設定していると
> この排他ロックの時間がムダに延びる問題が残っています。
> # たしか最近のバージョンだと改善されたはず。
>
AUTOVACUUM用のcost_delay設定はvacuum_cost_delayに従うように
なっており、vacuum_cost_delayの値は0、すなわち未設定状態です。
>> 今後の暫定対応としては該当テーブルの個別に通常VACUUMを実施する予定なのですが、
>> 個別VACUUM中にAUTOVACUUM処理でその他のテーブルのVACUUMが実施された
>> 場合、問題が発生するものでしょうか?
>
> "AUTO" であることが問題ではなく、VACUUM 全般で発生する可能性があります。
> 手動VACUUM時に あえて cost delay させないなど、調整が必要かもしれません。
>
了解しました。
現在の設定上、手動VACUUM時にcost delayさせていない状態と同様という
認識ですので、この状態で様子を見てみようと思います。
貴重なご意見、ご指摘誠にありがとうございました。
※一旦、該当テーブルのみAUTOVACUUMを無効化しておりますが
未だUPDATE文の滞留は解決しておらず、本事象はVACUUMとは
無関係である可能性が高くなってきました。
実はこのUPDATE文はpgpool経由で発行したもので、
そのUPDATE文を発行したpgpoolプロセスが残った状態のまま
どんどんリソースを食ってしまっています。
(詳細情報を先にお知らせすべきでした。申し訳ございません)
以上です。
> --
> Itagaki Takahiro
>
pgsql-jp メーリングリストの案内