mysqldにおけるスロークエリログ判定実装
スロークエリログはどのように計測され、出力されているのかをまとめてみました。
測定方法
THDクラスのset_time関数で計測開始、end_time関数で計測終了。
計測開始ポイント
- mysqld --bootstrapを使用している場合はmysql_parse関数の直前
- ネットワーク経由の場合はネットワークコマンド(COM_XXX)の種別判定直前
- ただしQUERYコマンド(COM_QUERY、SQLCOM_XXX)の場合はmysql_parse関数の直前で再設定
というわけでまとめるとSQL文のparse直前に計測を開始
計測終了ポイント
スロークエリログの出力
log_slow_statement関数はクエリ単位で必ず呼ばれ、その中でオプションの有無、設定した閾値、計測した値に基づいて出力する。