[pgsql-jp: 37703] Re: INDEXを残したまま大量データを高速に挿入したい
Daisuke Yamazaki
yamajaki @ gmail.com
2006年 11月 21日 (火) 17:51:25 JST
こんにちは.山崎と申します.
On Tue, 21 Nov 2006 17:02:38 +0900
河本陽一 <komoto.yoichi @ kcc.co.jp> wrote:
> 毎日1回、大量のデータ(1000万件)をひとつのトランザクションで投入し
> ようとしています。PostgreSQLは、7.4を使用しています。
> 投入速度が遅いため、投入時は最低限のINDEX以外を削除することで性能
> が出るようになりました。
> しかし、データ投入の間(時間にして約8時間20分)は、INDEXがないために
> SELECTの性能が出なくなってしまいます。
> これでは使用する上で困るので、回避方法を探しています。
>
> データ挿入の処理速度を上げる方法を調べてみましたが、いずれも思うよ
> うな動作となりませんでした。
> ・COPYを使用する
> →既存データがないので使用不可
これなのですが,
http://www.postgresql.jp/document/pg746doc/html/sql-copy.html
> また、COPY FROM コマンドは、ファイルからテーブルへとデータをコピーします
>(このとき、すでにテーブルにあるデータにコピー内容を追加します)。
とありますので,既存テーブルにデータがあるのなら,元データがファイルの形で
存在しなくても挿入するデータさえあれば問題ないと思います.
> 環境
> Redhat Linux ES4 (Kernel 2.6.9-42)
> PostgreSQL 7.4.13
状況が許すならば個人的に8.1.4をものすごくオススメしたいところです.
AMD Athlon(tm) 64 X2 Dual Core Processor 3800+
SATA2
FreeBSD6.1
create table test_table(
id integer ,
id2 integer ,
data1 int8,
data2 int8,
slot_time_at timestamp,
id3 integer ,
varchardata varchar(128)
)
create index idx_id_slot on test_table (id,slot_time_at);
なテーブルに対して1.5億レコードをCopyしたみたところ35分程度とものすごく
優秀な結果でした.
--
プログラマ集団 スケールアウト
Daisuke Yamazaki <yamajaki @ gmail.com>
Blog:最速配信研究会
http://d.hatena.ne.jp/yamaz/
pgsql-jp メーリングリストの案内