[pgsql-jp: 28403] updateの性能を向上

fukudami @ ntes.nec.co.jp fukudami @ ntes.nec.co.jp
2002年 12月 20日 (金) 20:34:51 JST


はじめまして。福田と申します。

Solaris8 + PostgreSQL 7.2.1環境において、DBの更新性能を向上
したいのですが、どなたかお知恵をお借りできないでしょうか?
勝手ながら、少々いそいでおります。

現状、普通にupdateを使用してDBを更新しているのですが、どうも
望んだ性能が出ません。現在約40万件レコード登録してあるテーブル
に対し、下記の様な方式でupdateを実行すると、約15分程度かかって
しまいます。更新対象のレコード数はそれほど多くは無い(と言っても
ばらつきはありますが)ので、可能ならば2〜3分程度の性能にしたいです。
更新対象のレコード数は、一度に500〜3000程度です。

        psql -h $hostname -d $database_name -c \
                "update $daily_db \
                      set status='$condition_name' \
                      where $tmp_db.ip_address = \
                                   $daily_pm_db_stat.ip_address and \
                            $tmp_db.port_number = \
                                $daily_pm_db_stat.port_number"
(注) $daily_dbについては、は下記のprofile_dbスキーマ定義を参照してください。

最も最適な更新方法はあるのでしょうか?それとも、これは妥当な
性能なのでしょうか?

開発環境は、
 Solaris8
  PostgreSQL 7.2.1
  gcc-2.95.3-sol8
  shからpsqlを直接使用しています。

スキーマ定義は、
CREATE TABLE "profile_db" (
        "ip_address" text NOT NULL,
        "port_number" integer NOT NULL,
        "name" text ,
        "counter" integer not null default 0,
        "status"  text,
        primary key(ip_address,port_number)
);

よろしくお願い致します。



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