[pgsql-jp: 37756] Re: INDEX を残したまま大量データを高速に挿入したい(結果)

河本陽一 komoto.yoichi @ kcc.co.jp
2006年 12月 4日 (月) 20:31:52 JST


こうもとです。

#自己レス
>  本テーブルへの追加を、一時テーブルからにするか、一度ファイルに吐き
> 出してCOPYするかは、性能を比較してやってみようと思います。

 最終的に必要なテーブルは、処理速度を上げるために完全には正規化して
いません。
 このため、一部重複したフィールドがあるのですが、このフィールドも多
少加工が必要です。

 上記の理由から、一時テーブルは集計に必要な順番に並び替えるだけに使
用し、本テーブルに必要な情報は専用のプログラムで作成することにしまし
た。
 DBへの挿入はCOPY、DBからの取得はSELECTで行いました。

 この処理に変更した結果、以下のように処理時間が激減しました。

マシンスペック      CPU:Pentium4 3.20GHz, Memory:512M, DB:Pg 7.4.13
データ件数          50万件
処理時間            25分 → 5分


 集計の前処理のソートをDBに任せているのですが、この処理は5分のうち
の1分でした。
 DBを使わず、自前でオンメモリでやることでさらに速度が上がりそうです
が、メモリがたくさん必要なため、とりあえず見送っています。

 集計時のFETCHで一度に取得する件数など、多少のチューニング要素は残っ
ていますが、ロジックとしてはこれで行こうと思います。
 いろいろとアイデアを下さった皆さん、ありがとうございました。


======================================================================
河本陽一(こうもとよういち)
mailto:komoto.yoichi @ kcc.co.jp




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