如何在不將 MySQL 查詢列印到控制檯的情況下檢視查詢所花費的時間?


要檢查這一點,我們需要有概要檔案資訊,其中指示了當前會話期間執行的語句的資源使用情況。可以透過 SHOW PROFILESHOW PROFILES 語句獲取概要檔案資訊。

在執行這些語句之前,必須將概要檔案會話變數設定為 1,如下所示:

mysql> set profiling = 1;
Query OK, 0 rows affected (0.00 sec)

現在,如果我們執行 SHOW PROFILES 語句,那麼它將顯示傳送到伺服器的最新的語句列表以及持續時間和查詢 ID。

mysql> show profiles;
+----------+------------+--------------------------------------+
| Query_ID | Duration   | Query                                |
+----------+------------+--------------------------------------+
| 1        | 0.01602200 | drop table if exists t1              |
| 2        | 0.57223450 | create table t1(id int)              |
| 3        | 0.00015425 | show profile for query1              |
| 4        | 0.22945050 | create table e1(id int)              |
| 5        | 0.09977025 | insert into e1(id) values(3),(4),(5) |
+----------+------------+--------------------------------------+
5 rows in set (0.00 sec)

現在,假設我們想檢查特定查詢的持續時間,那麼我們可以為 query query_no 語句執行 SHOW PROFILE。例如,如果我們為查詢 ID = 5 執行語句,則輸出如下:

mysql> show profile for query 5;
+------------------------------+--------------+
| Status                       | Duration     |
+------------------------------+--------------+
| starting                     | 0.000138     |
| checking permissions         | 0.000024     |
| Opening tables               | 0.000057     |
| System lock                  | 0.035186     |
| init                         | 0.000035     |
| update                       | 0.021484     |
| Waiting for query cache lock | 0.000021     |
| update                       | 0.000005     |
| end                          | 0.000024     |
| query end                    | 0.042700     |
| closing tables               | 0.000017     |
| freeing items                | 0.000076     |
| logging slow query           | 0.000003     |
| cleaning up                  | 0.000002     |
+------------------------------+--------------+
14 rows in set (0.00 sec)

更新時間:2019 年 7 月 30 日

155 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始
廣告