MySQLのクエリ実行速度をミリ秒単位で計測する方法を記載します。
ターミナルでMySQLサーバに入って、SQLを実行すると以下のように秒単位での速度は計測できますが、もう少し詳細に計測したい(ミリ秒単位で計測したい)、という場合の対処法です。
mysql> select * from it_users ;
// セレクト結果
1 row in set (0.00 sec)
それでは、早速結論です。
結論:SHOW PROFILESを使用します
MySQLのクエリ実行速度をミリ秒単位で計測したい場合の対応方法
→SHOW PROFILESを使用します。
まず、SHOW PROFILESについて記載していきます。
SHOW PROFILESとは
SHOW PROFILESについて、公式に以下の記載があります。
現在のセッションの過程で実行されたステートメントのリソース使用状況を示すプロファイリング情報を表示します。
MySQL :: MySQL 8.0 リファレンスマニュアル :: 13.7.7.31 SHOW PROFILES ステートメント
現在のセッションと記載されているので、セッション単位での計測となります。
セッション単位とは、複数人でMySQLサーバに入って「SHOW PROFILES」を実行した場合、自分が実行したSQLのみ「SHOW PROFILES」の結果として返されるということです。
言い換えると、他の人が実行したSQLは「SHOW PROFILES」の結果として出力されないということになります。
また、SHOW PROFILES ステートメントは非推奨と記載されています。
非推奨のようですが、簡単にクエリ実行速度をミリ秒単位で計測可能なステートメントなので使用させていただきます!
セッション単位での計測
→他の人が実行したSQLは計測対象とならない
非推奨のステートメント
それでは、実際にSHOW PROFILESを使ってみます!
SHOW PROFILESを実行してみる
まず、プロファイリングを有効にする必要があります。
以下のように「SET profiling=1;」で有効にします。
mysql> SET profiling = 1;
Query OK, 0 rows affected, 1 warning (0.00 sec)
これで計測可能な状態となりましたので、以下のように計測したいSQLを実行します。
// 計測したいSQLを実行
mysql> select * from it_users ;
// セレクト結果
1 row in set (0.00 sec)
これで計測されましたので、「SHOWPROFILES;」で計測結果を確認します。
mysql> SHOW PROFILES;
+----------+------------+------------------------+
| Query_ID | Duration | Query |
+----------+------------+------------------------+
| 1 | 0.00025150 | select * from it_users |
+----------+------------+------------------------+
1 row in set, 1 warning (0.00 sec)
DurationがSQL実行にかかった時間です。
単位は秒ですので、1000倍すればミリ秒に変換できます。
上の例では
0.00025150 × 1000 = 0.25150ミリ秒
となります。
まとめ
SHOW PROFILESを使用してクエリの実行時間をミリ秒単位で計測する方法について記載しました。
簡単に計測できましたが、SHOW PROFILESに到るまで結構苦労したので記事にさせて頂きました。
SHOW PROFILESを使用することでミリ秒単位でSQLの実行速度を計測可能
SHOW PROFILESは非推奨のステートメント
→非推奨のようですが、これを使えば簡単にミリ秒単位での測定が可能