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

Mashiki mashiki @ yanah.com
2002年 12月 21日 (土) 22:01:38 JST


 Mashikiです。

・$tmp_dbのほうの定義はどうなっているのでしょうか?
・また、$daily_pm_db_statの定義はどのようになっているでしょうか?
・更新対象500の時も3000の時も15分かかるのでしょうか?
・15分はこのpsqlを1回実行するのにかかる時間でしょうか?
 それともこのpsqlを500〜3000流すのでしょうか?
・テストしているマシンのスペック(特にCPUの種類/速さとメモリの量)は?

と不明なことが多いで、

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

は、なんともいえないでしょう。

気がついたところで、

・$tmp_dbにインデクスは張られていますか
・$daily_dbと$daily_pm_db_statが別のものであれば、全件更新に
 なっているような気がします。結果の更新件数は期待通りですか
・explainの結果は期待通りのものですか

が気になります。

>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 メーリングリストの案内