MySQL是目前應用最廣泛的關系型數據庫,負責存儲大量數據,支撐著許多網站的日常運營。但是,隨著數據庫的數據量增長,查詢速度會變慢,因此需要及時排查慢查詢語句,并進行優化。這里我們介紹如何查詢當前正在執行的慢SQL語句,以便針對性的優化。
mysql> show processlist;
+----+-----------------------+-----------------------+------+---------+------+--------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-----------------------+-----------------------+------+---------+------+--------------------------+------------------+
| 2 | event_scheduler | localhost | NULL | Daemon | 344 | Waiting for next activation | NULL |
| 3 | system user | | NULL | Connect | 344 | Waiting for next activation | NULL |
| 4 | system user | | NULL | Connect | 344 | Waiting for next activation | NULL |
| 5 | system user | | NULL | Connect | 2777 | Waiting for next activation | NULL |
| 10 | website_user1 | localhost | db1 | Query | 0 | init | show processlist |
| 11 | website_user2 | localhost | db1 | Query | 1 | Sending data |select * from user|
+----+-----------------------+-----------------------+------+---------+------+--------------------------+------------------+
6 rows in set (0.00 sec)
上述代碼展示了通過執行show processlist命令,可以查詢出當前正在執行的所有MySQL連接及其狀態。主要包含以下字段:
- Id - MySQL鏈接的 ID
- User - MySQL連接的用戶名
- Host - MySQL連接的主機地址
- db - MySQL連接的當前數據庫
- Command - MySQL執行的操作命令
- Time - MySQL連接的活動時長
- State - MySQL連接的當前狀態
- Info - MySQL正在執行的SQL語句
從上述代碼中可以看到,此時有兩個MySQL連接正在執行SQL語句,其中一個是"show processlist",另一個是"select * from user",并且根據時間字段的數據顯示,第二個連接的執行時間已經超過了1秒,可以將其認為是慢查詢語句。
通過上述方法,我們可以實時查詢正在執行的MySQL連接和其所執行的SQL語句,以便針對性的進行優化。
下一篇css3動畫出現卡頓