[pgsql-jp: 40475] Re: INSERTの処理時間に関しまして

Itagaki Takahiro itagaki.takahiro @ gmail.com
2010年 10月 28日 (木) 15:53:53 JST


2010/10/28  <munekatsu.tomori @ isd.co.jp>:
> Postgresql8.3.9を使用して90万件のデータをINSERTしています。
> この処理は、一度データをトランケートし90万件を再度INSERTしています。
> 処理時間が当初2時間程度でしたが、4ヵ月後では6時間近くかかっています。
> 別の環境を作成し、現象の再現を試みましたが、再現せず調査が手詰まりの状態です。

データのトランケートには、TRUNCATE のSQLを使っていますか?
それならば、DB 的には、毎回ほぼ初期状態に戻っているはずです。
もし時間が変わったなら、例えばファイルシステムレベルの
断片化が影響しているかもしれません。

DELETE で消していたり、外部キー (REFERENCE) があると、
また話が変わってきます。(DELETE + VACUUM FULL もダメです!)
差し支えのない範囲で、関連するテーブルやインデックスの定義、
具体的なデータの投入手順を示してもらえると、具体的なコメントが
つくかもしれません。

> テーブル内の不要領域が増大していることが原因とも思いましたが、
> 処理時間が6時間かかっている環境はVACUUM FULLを実行していますので、
> 可能性は薄いと思っています。

INSERT 対象のテーブルを TRUNCATE しているのであれば、あまり関係
無いかもしれませんが、VACUUM FULLではインデックスは掃除されないため
一応確認してみてください。「VACUUM FULL していれば安心」という
思い込みは、むしろ危険です。
# 9.0 の VACUUM FULL ならば(必要性はさておき)「安心」なのですが。

-- 
Itagaki Takahiro


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