[pgsql-jp: 40307] Re: SQL処理時間の計測について

Takahiro Itagaki itagaki.takahiro @ oss.ntt.co.jp
2010年 6月 29日 (火) 15:55:54 JST


こんにちわ。pg_stat_statements の作者です :-)

戸川 一成 <togawa @ kdl.co.jp> wrote:

> > 4 と 3 は同じになりそうなのですが、顕著な差がでましたでしょうか?
> > pg_stat_statements の作者の方からコメントがあるかもしれません。
> 
> 2.と4.はほぼ同じ(誤差は±1ms)です。
> 
> ですが、3.と4.では以下の違いがありました。
> 3.の結果:1011.281 ms
> 4.の結果: 765.851 ms

ざっと調べてみましたが、1 > 3 > 2 = 4 となるのは、内部の動作と
照らし合わせても妥当だと思いました。それぞれのタイマの開始/終了
タイミングと、内部の処理を一覧にすると以下のようになっていました。

<始> 1.psql \timing
            クエリ送信+受信
<始> 3.ログ出力結果
            トランザクションの開始
            SQL解析 (Parser)
            実行計画の生成 (Planner)
<始> 2.explain analyze / 4.pg_stat_statements
            実行計画の実行 (Executor)
<終> 2.explain analyze / 4.pg_stat_statements
            結果送信
            トランザクションの完了
<終> 3.ログ出力結果
            結果受信
<終> 1.psql \timing
            psql 画面表示

アプリケーションの最終的な総合レスポンスは、1 で見ることになります。
ネットワークを無視して DB 内の処理時間に限るなら 3 が妥当でしょうか。

ただ、2.EXPLAIN はもともと重いクエリ (I/Oやソート) の個別解析用なので
Parser や Planner にかかる時間は相対的に小さいでしょうし、
4.pg_stat_statements も準備済み文 (prepared statement) で利用すれば、
Parser や Planner の結果がキャッシュされるため、影響は小さくなります。
どちらも「もともと想定される使い方」では、3.との差は小さくなると思われます。

------------------------------------------------------------
NTT オープンソース ソフトウェア センタ
板垣貴裕 <itagaki.takahiro @ oss.ntt.co.jp>




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