[pgsql-jp: 41083] Re: Question about "Total runtime"

花田 茂 hanada @ metrosystems.co.jp
2012年 4月 17日 (火) 21:35:04 JST


花田です。

本題とはあまり関係ないかもしれませんが……

(2012/04/17 12:10), Jun Ogawa wrote:
> ある検索のSQL(後述)で、EXPLAIN ANALYZEをかけたところ、
> 
> Total runtime: 3540.537 ms(2954 rows)
> 
> と出ました。

このログ(実際にはrowsはTotal runtimeの次の行に出るはずですが)は、EXPLAIN
ANALYZEの結果(実行計画)が 2954 行あるいうことですよね?これはVERBOSEオプ
ションなどを指定していたとしても相当複雑なSQLです。このことからすると、

> SQL文:
> SELECT A.time FROM A, B  WHERE A.userid = 10 AND B.time  = A.time
> AND B.name = 'OGAWA' AND A.address = 'Yokohama' limit 1 ;

ここでいうAやBは実は複雑なビューだったりするのでしょうか?笠原さんの回答
にもあるとおり、EXPLAIN ANALYZEの結果を見せていただけると適切な回答が得
られるのではないかと思います。EXPLAIN結果のサイズが大きすぎてMLはちょっ
と、ということであれば、http://explain.depesz.com/などに実行計画を保存し
てそのURLだけ投げるという手もあります。

> 一方、このSQLを呼び出しているJava側で開始前後の時間を図ると17秒かかっています。Java側ではSQL実行文の前後で時刻のログを出させています。
> #手入力でSQLを実行しても、感覚でこれくらいの時間かかっています。

この「手入力」がpsqlからEXPLAIN ANALYZEを実行したということであれば、
「\timing on」を実行してから実行することで、psqlからクエリを投げて結果を
取得しきるまで(結果表示は含まない)にかかる正確な時間が得られます。DBサー
バ上とJavaアプリケーションが動作するホスト上で同じクエリを実行するのにか
かる時間に差が出れば、ホスト間のデータ転送に時間がかかっていると判断でき
そうです。
# 笠原さんのいうように、LIMIT 1があるのでこの線はなさそうですが。

-- 
株式会社メトロシステムズ
  花田 茂
Mail : hanada @ metrosystems.co.jp
 Tel : 03-5951-1219
 Fax : 03-5951-2929


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