2010年6月29日

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

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

戸川 一成 <togawa@xxxxx> 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@xxxxx>

投稿者 xml-rpc : 2010年6月29日 15:55
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/96735
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。