在網站開發過程中,有些時候我們需要了解MySQL的伺服器狀态資訊,譬如目前MySQL啟動後的運作時間,目前MySQL的用戶端會話連接配接數,目前MySQL伺服器執行的慢查詢數,目前MySQL執行了多少 SELECT UPDATE DELETE INSERT
語句、執行了多少
/
語句等統計資訊,進而便于我們根據目前MySQL伺服器的運作狀态進行對應的調整或優化工作。
在MySQL中,我們可以使用
SHOW STATUS
指令語句來檢視MySQL伺服器的狀态資訊。下面,我們以DOS指令視窗的形式連接配接MySQL,并執行 show status;
指令,我們将看到如下顯示資訊:
執行show status指令顯示的部分結果
當我們執行
show status
語句時,MySQL将會列出多達300多條的狀态資訊記錄,其中包括了供我們檢視了解的各種資訊。不過,如果直接使用 show status
指令得到300多條記錄,會讓我們看得眼花缭亂,是以我們希望能夠「按需檢視」一部分狀态資訊。這個時候,我們可以在 show status
語句後加上對應的 like
子句。例如,我們想要檢視目前MySQL啟動後的運作時間,我們可以執行如下語句: --查詢目前MySQL本次啟動後的運作統計時間
show status like 'uptime';
此時,我們就可以看到如下結果:
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Uptime | 5667 |
+---------------+-------+
1 row in set (0.00 sec)
同樣的,如果我們要本次MySQL啟動後執行的
SELECT
語句的次數,我們可以執行如下語句:
show status like 'com_select';
對應輸出結果如下:
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Com_select | 1 |
+---------------+-------+
1 row in set (0.00 sec)
此外,與
WHERE
子句中的
LIKE
關鍵字類似,
show status
後的
LIKE
關鍵字也可以使用'_'或'%'等通配符來進行模糊比對。例如我們可以執行如下語句來檢視MySQL伺服器的線程資訊:
show status like 'Thread_%';
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| Threads_cached | 0 |
| Threads_connected | 1 |
| Threads_created | 1 |
| Threads_running | 1 |
+-------------------+-------+
4 rows in set (0.00 sec)
值得注意的是,在上述
show status like 'com_select'
指令的執行示例中,顯示的
SELECT
語句統計資訊僅僅表示目前會話連接配接執行的
SELECT
語句數量。因為,
show status
指令的完整文法如下:
SHOW [統計範圍] STATUS [LIKE '狀态項名稱']
--統計範圍關鍵字分為GLOBAL和SESSION(或LOCAL)兩種。
在
show status
的完整文法中,"[]"中的部分是可選的,如果我們的
show status
語句中不包含統計範圍關鍵字,則預設統計範圍為
SESSION
,也就是隻統計目前連接配接的狀态資訊。如果我們需要查詢自目前MySQL啟動後所有連接配接執行的
SELECT
語句總數,我們可以執行如下語句:
show global status like 'com_select';
以上即是
show status
的詳細用法。由于
show status
的狀态統計項較多,我們就不再一一解釋每個統計項的具體含義,在這裡,我們僅列出部分常用的狀态資訊檢視語句:
--檢視MySQL本次啟動後的運作時間(機關:秒)
show status like 'uptime';
--檢視select語句的執行數
show [global] status like 'com_select';
--檢視insert語句的執行數
show [global] status like 'com_insert';
--檢視update語句的執行數
show [global] status like 'com_update';
--檢視delete語句的執行數
show [global] status like 'com_delete';
--檢視試圖連接配接到MySQL(不管是否連接配接成功)的連接配接數
show status like 'connections';
--檢視線程緩存内的線程的數量。
show status like 'threads_cached';
--檢視目前打開的連接配接的數量。
show status like 'threads_connected';
--檢視目前打開的連接配接的數量。
show status like 'threads_connected';
--檢視建立用來處理連接配接的線程數。如果Threads_created較大,你可能要增加thread_cache_size值。
show status like 'threads_created';
--檢視激活的(非睡眠狀态)線程數。
show status like 'threads_running';
--檢視立即獲得的表的鎖的次數。
show status like 'table_locks_immediate';
--檢視不能立即獲得的表的鎖的次數。如果該值較高,并且有性能問題,你應首先優化查詢,然後拆分表或使用複制。
show status like 'table_locks_waited';
--檢視建立時間超過slow_launch_time秒的線程數。
show status like 'slow_launch_threads';
--檢視查詢時間超過long_query_time秒的查詢的個數。
show status like 'slow_queries';
【當你用心寫完每一篇部落格之後,你會發現它比你用代碼實作功能更有成就感!】