[pgsql-jp: 40396] Re: AUTOVACUUMと手動VACUUMの同時実行

Itagaki Takahiro itagaki.takahiro @ gmail.com
2010年 9月 14日 (火) 14:43:49 JST


2010/9/13 Kei SUGIMOTO <kei.wings @ gmail.com>:
> 特定テーブルがVACUUM(AUTOVACUUM)中に、そのテーブルにUPDATE処理を実施した際に
> 処理待ち状態となってしまいました。

確かに、VACUUMのゴミ取りの間は競合するようなロックはかからないのですが、
VACUUMの最終ステップで行われる、テーブルファイルの末尾の切り詰め処理で
排他ロックが取得される場合があります。これにぶつかったのかもしれません。

特に 8.1 等の古いバージョンだと、vacuum cost delay を設定していると
この排他ロックの時間がムダに延びる問題が残っています。
# たしか最近のバージョンだと改善されたはず。

> 今後の暫定対応としては該当テーブルの個別に通常VACUUMを実施する予定なのですが、
> 個別VACUUM中にAUTOVACUUM処理でその他のテーブルのVACUUMが実施された
> 場合、問題が発生するものでしょうか?

"AUTO" であることが問題ではなく、VACUUM 全般で発生する可能性があります。
手動VACUUM時に あえて cost delay させないなど、調整が必要かもしれません。

-- 
Itagaki Takahiro


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