如何在不將 MySQL 查詢列印到控制檯的情況下檢視查詢所花費的時間?
要檢查這一點,我們需要有概要檔案資訊,其中指示了當前會話期間執行的語句的資源使用情況。可以透過 SHOW PROFILE 和 SHOW 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)
廣告