prestodbにおけるelapsed timeとは何か
prestodbを扱っていてクエリメトリクスを見る上で必ず参照することになるelapsed timeが一体何なのかを調べたメモ。 一言でいうとクエリが作成されてからクエリが完了するまでの時間なんだけど、じゃあそれがいつなのかというのをソースを追う。
全体の流れを追うのに、
https://www.slideshare.net/frsyuki/hadoop-source-code-reading-15-in-japan-presto
presto_executor_and_coordinator.md · GitHub
あたりが非常に参考になるので足がかりにするとよい。
実際に createTime
, endTime
を作成しているのは QueryStateMachine
内で、
createTime
:QueryStateMachine
インスタンス作成時
endTime
:recordDoneStats()
コール時transitionToFinished()
ortransitionToFailed()
ortransitionToCanceled()
の処理内でrecordDoneStats()
が呼ばれる
実際に QueryStateMachine
のインスタンスは SqlQueryExecution
のコンストラクタ内で作成され、 transitionToXXX()
は com.google.common.util.concurrent.Futures#addCallback()
によって onSuccess()
などのcallbackとして処理される。
SqlQueryExecution
のオブジェクトは SqlQueryManager#createQuery
によって作成される。
メトリクスを把握するのによく参照する時間周りのまとめ。
タイプ | 値 | 処理クラス |
---|---|---|
createTime | クエリ作成時間 | QueryStateMachine |
startTime | 実際のクエリ処理開始時間 | Session |
endTime | 実際のクエリ処理完了時間 | QueryStateMachine |
queuedTime | duration(startTime - createTime) | QueryStateMachine |
elapsedTime | duration(endTime - createTime) | QueryStateMachine |
executionTime | elapsedTime - queuedTime | QueryStats |
雑いけどひとまずメモ。