MySQL查看數據庫狀態命令詳細講解

前言

數據查詢語言(DQL: Data Query Language):其語句,也稱為“數據檢索語句”,用以從表中獲得數據,確定數據怎樣在應用程序給出。保留字SELECT是DQL(也是所有SQL)用得最多的動詞,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。這些DQL保留字常與其它類型的SQL語句一起使用。

show status

使用SHOW STATUS語句能夠獲取MySQL服務器的一些狀態信息,這些狀態信息主要是MySQL數據庫的性能參數。SHOW STATUS語句的語法格式如下:

SHOW [SESSION | GLOBAL] STATUS LIKE 'status_name';

其中,SESSION表示獲取當前會話級別的性能參數,GLOBAL表示獲取全局級別的性能參數,並且SESSION和GLOBAL可以省略,如果省略不寫,默認為SESSION。status_name表示查詢的參數值。熟練掌握這些參數的使用,能夠更好地瞭解SQL語句的執行頻率。SHOW STATUS語句支持的參數值

Not_flushed_key_blocks   在鍵緩存中已經改變但是還沒被清空到磁盤上的鍵塊。
Not_flushed_delayed_rows

mysql> show status;
+-----------------------------------------------+--------------------------------------------------+
| Variable_name                                 | Value                                            |
+-----------------------------------------------+--------------------------------------------------+
| Aborted_clients                               | 1  由於客戶沒有正確關閉連接已經死掉,已經放棄的連接數量|
| Aborted_connects                              | 0  嘗試已經失敗的MySQL服務器的連接的次數			   |
| Binlog_cache_disk_use                         | 0  該狀態表示有多少個事務使用瞭臨時文件       		 |
| Binlog_cache_use                              | 1  有多少個事物使用瞭ache_size來緩存未提交的事物日志 |
| Binlog_stmt_cache_disk_use                    | 0                                                |
| Binlog_stmt_cache_use                         | 0                                                |
| Bytes_received                                | 248 從客戶處已經接收到的字節數                      |
| Bytes_sent                                    | 185 已經發送給所有客戶的字節數                      |
| Com_statement                                 | 0   每一個變量語句對應的次數                        |
| Connections                                   | 41472     	試圖連接MySQL服務器的次數 		   |
| Created_tmp_disk_tables                       | 0   服務器執行語句時在硬盤上自動創建的臨時表的數量    |
| Created_tmp_files                             | 5   mysqld創建的臨時文件個數                       |
| Created_tmp_tables                            | 0      當執行語句時,已經被創造瞭的隱含臨時表的數量	  |
| Delayed_errors                                | 0 用INSERT DELAYED寫入的發生某些錯誤(可能重復鍵值)的行數 |
| Delayed_insert_threads                        | 0      正在使用的延遲插入處理器線程的數量			  |
| Delayed_writes                                | 0          用INSERT DELAYED寫入的行數     		  |
| Flush_commands                                | 17        	執行FLUSH命令的次數     			  |
| Handler_commit                                | 0      內部COMMIT命令的個數                        |
| Handler_delete                                | 0      請求從一張表中刪除行的次數       			 |
| Handler_discover                              | 0 MySQL服務器可以問NDB CLUSTER存儲引擎是否知道某一名字的表 |
| Handler_external_lock                         | 0                                                |
| Handler_mrr_init                              | 0                                                |
| Handler_prepare                               | 0      兩階段提交操作準備階段的計數器               |
| Handler_read_first                            | 0      請求讀入表中第一行的次數                     |
| Handler_read_key                              | 0      請求數字基於鍵讀行                          |
| Handler_read_last                             | 0                                                |
| Handler_read_next                             | 0      請求讀入基於一個鍵的一行的次數               |
| Handler_read_prev                             | 0      按照索引的順序讀取前面一行數據的請求的個數     |
| Handler_read_rnd                              | 0      請求讀入基於一個固定位置的一行的次數          |
| Handler_read_rnd_next                         | 0      讀取數據文件中下一行數據的請求的個數          |
| Handler_rollback                              | 0      內部ROLLBACK命令的數量                     |
| Handler_savepoint                             | 0      在一個存儲引擎放置一個保存點的請求數量        |
| Handler_savepoint_rollback                    | 0      在一個存儲引擎的要求回滾到一個保存點數目       |
| Handler_update                                | 0      請求更新表中一行的次數             		  |
| Handler_write                                 | 0      請求向表中插入一行的次數                    |
| Innodb_buffer_pool_dump_status                | Dumping of buffer pool not started               |
| Innodb_buffer_pool_load_status                | Buffer pool(s) load completed at 220224 21:04:35 |
| Innodb_buffer_pool_resize_status              |                                                  |
| Innodb_buffer_pool_pages_data                 | 32422                                            |
| Innodb_buffer_pool_bytes_data                 | 531202048                                        |
| Innodb_buffer_pool_pages_dirty                | 0                                                |
| Innodb_buffer_pool_bytes_dirty                | 0                                                |
| Innodb_buffer_pool_pages_flushed              | 235                                              |
| Innodb_buffer_pool_pages_free                 | 97929                                            |
| Innodb_buffer_pool_pages_misc                 | 705                                              |
| Innodb_buffer_pool_pages_total                | 131056                                           |
| Innodb_buffer_pool_read_ahead_rnd             | 0                                                |
| Innodb_buffer_pool_read_ahead                 | 23377                                            |
| Innodb_buffer_pool_read_ahead_evicted         | 0                                                |
| Innodb_buffer_pool_read_requests              | 330362716      InnoDB已經完成的邏輯讀請求數        |
| Innodb_buffer_pool_reads                      | 9004                                             |
| Innodb_buffer_pool_wait_free                  | 0                                                |
| Innodb_buffer_pool_write_requests             | 3783                                             |
| Innodb_data_fsyncs                            | 47                                               |
| Innodb_data_pending_fsyncs                    | 0                                                |
| Innodb_data_pending_reads                     | 0                                                |
| Innodb_data_pending_writes                    | 0                                                |
| Innodb_data_read                              | 530813440                                        |
| Innodb_data_reads                             | 33379                                            |
| Innodb_data_writes                            | 279                                              |
| Innodb_data_written                           | 4193792      至此已經寫入的數據量(字節)           |
| Innodb_dblwr_pages_written                    | 20                                               |
| Innodb_dblwr_writes                           | 10                                               |
| Innodb_log_waits                              | 0            我們必須等待的時間                    |
| Innodb_log_write_requests                     | 9              日志寫請求數                       |
| Innodb_log_writes                             | 15            向日志文件的物理寫數量               |
| Innodb_os_log_fsyncs                          | 22           向日志文件完成的fsync()寫數量         |
| Innodb_os_log_pending_fsyncs                  | 0            掛起的日志文件fsync()操作數量         |
| Innodb_os_log_pending_writes                  | 0            掛起的日志文件寫操作                  |
| Innodb_os_log_written                         | 12288          寫入日志文件的字節數                |
| Innodb_page_size                              | 16384          編譯的InnoDB頁大小(默認16KB)        |
| Innodb_pages_created                          | 42                    創建的頁數                  |
| Innodb_pages_read                             | 32380                 讀取的頁數                  |
| Innodb_pages_written                          | 235                   寫入的頁數                  |
| Innodb_row_lock_current_waits                 | 0               當前等待的待鎖定的行數             |
| Innodb_row_lock_time                          | 0              行鎖定花費的總時間,單位毫秒         |
| Innodb_row_lock_time_avg                      | 0              行鎖定的平均時間,單位毫秒           |
| Innodb_row_lock_time_max                      | 0              行鎖定的最長時間,單位毫秒           |
| Innodb_row_lock_waits                         | 0              一行鎖定必須等待的時間數             |
| Innodb_rows_deleted                           | 6              從InnoDB表刪除的行數                |
| Innodb_rows_inserted                          | 2193           插入到InnoDB表的行數                |
| Innodb_rows_read                              | 351814064      從InnoDB表讀取的行數                |
| Innodb_rows_updated                           | 0              InnoDB表內更新的行數                |
| Innodb_num_open_files                         | 136                                              |
| Innodb_truncated_status_writes                | 0                                                |
| Innodb_available_undo_logs                    | 128                                              |
| Key_blocks_not_flushed                        | 0  鍵緩存內已經更改但還沒有清空到硬盤上的鍵的數據塊數量|
| Key_blocks_unused                             | 53585       鍵緩存內未使用的塊數量  			      |
| Key_blocks_used                               | 3           用於關鍵字緩存的塊的數量                |
| Key_read_requests                             | 6           請求從緩存讀入一個鍵值的次數            |
| Key_reads                                     | 3           從磁盤物理讀入一個鍵值的次數            |
| Key_write_requests                            | 0           請求將一個關鍵字塊寫入緩存次數          |
| Key_writes                                    | 0           將一個鍵值塊物理寫入磁盤的次數          |
| Last_query_cost                               | 0.000000                                         |
| Last_query_partial_plans                      | 0                                                |
| Locked_connects                               | 0                                                |
| Max_execution_time_exceeded                   | 0                                                |
| Max_execution_time_set                        | 0                                                |
| Max_execution_time_set_failed                 | 0                                                |
| Max_used_connections                          | 330     			同時使用的連接的最大數目          |
| Max_used_connections_time                     | 2022-02-24 22:07:44                              |
| Not_flushed_delayed_rows                      | 0           在INSERT DELAY隊列中等待寫入的行的數量  |
| Ongoing_anonymous_transaction_count           | 0                                                |
| Open_files                                    | 5          		打開文件的數量					  |
| Open_streams                                  | 0                 打開流的數量(主要用於日志記載)    |
| Open_table_definitions                        | 11                緩存的.frm文件數                |
| Open_tables                                   | 78   				打開表的數量                    |
| Opened_files                                  | 7925              系統打開過的文件總數             |
| Opened_table_definitions                      | 0                 已緩存的.frm文件數              |
| Opened_tables                                 | 0            		已經打開的表的數量      		    |             
| Qcache_free_blocks                            | 1           查詢緩存內自由內存塊的數量              |
| Qcache_free_memory                            | 1031832     用於查詢緩存的自由內存的數量            |
| Qcache_hits                                   | 0           查詢緩存被訪問的次數                   |
| Qcache_inserts                                | 0           加入到緩存的查詢數量                   |
| Qcache_lowmem_prunes                          | 0           由於內存較少從緩存刪除的查詢數量         |
| Qcache_not_cached                             | 236889      非緩存查詢數						   |
| Qcache_queries_in_cache                       | 0           登記到緩存內的查詢的數量                |
| Qcache_total_blocks                           | 1           查詢緩存內的總塊數                     |
| Queries                                       | 561204      被服務器執行的語句個數                 |
| Questions                                     | 2           發往服務器的查詢的數量				  |
| Select_full_join                              | 0                                                |
| Select_full_range_join                        | 0                                                |
| Select_range                                  | 0                                                |
| Select_range_check                            | 0                                                |
| Select_scan                                   | 0                                                |
| Slave_open_temp_tables                        | 0                                                |
| Slow_launch_threads                           | 0                                                |
| Slow_queries                                  | 0         要花超過long_query_time時間的查詢數量    |
| Sort_merge_passes                             | 0                                                |
| Sort_range                                    | 0                                                |
| Sort_rows                                     | 0                                                |
| Sort_scan                                     | 0                                                |
| Ssl_***                   					| 0             用於SSL連接的變量                   |    
| Table_locks_immediate                         | 123           立即獲得的表的鎖的次數               |
| Table_locks_waited                            | 0            不能立即獲得的表的鎖的次數             |
| Tc_log_max_pages_used                         | 0             日志使用的最大頁數                   |
| Tc_log_page_size                              | 0          用於XA恢復日志的內存映射實現的頁面大小    |
| Tc_log_page_waits                             | 0          對於恢復日志的內存映射實現               |
| Threads_cached                                | 2                   線程的緩存值                  |
| Threads_connected                             | 328                當前打開的連接的數量    		   |
| Threads_created                               | 330               創建用來處理連接的線程數          |
| Threads_running                               | 2                  不在睡眠的線程數量   		    |
| Uptime                                        | 42686              服務器工作瞭多少秒				|
| Uptime_since_flush_status                     | 42686   最近一次使用FLUSH STATUS 的時間(以秒為單位)|

# 狀態信息查詢語句
--查看試圖連接到MySQL(不管是否連接成功)的連接數
show status like 'connections';
--查看線程緩存內的線程的數量。
show status like 'threads_cached';
--查看當前打開的連接的數量。
show status like 'threads_connected';
--查看查詢時間超過long_query_time秒的查詢的個數。
show status like 'slow_queries';
--查看線程數
show status like  'Threads%';
Threads_connected : 這個數值指的是打開的連接數.
Threads_running :	這個數值指的是激活的連接數,這個數值一般遠低於connected數值.
Threads_connected 	 跟show processlist結果相同,表示當前連接數。準確的來說,Threads_running是代表當前並發數
Threads_created		 表示創建過的線程數,通過查看Threads_created就可以查看MySQL服務器的進程狀態。(MySQL服務器的線程數需要在一個合理的范圍之內,這樣才能保證MySQL服務器健康平穩地運行)
如果我們在MySQL服務器配置文件中設置瞭thread_cache_size,當客戶端斷開之後,服務器處理此客戶的線程將會緩存起來以響應下一個客戶而不是銷毀(前提是緩存數未達上限)。Threads_created表示創建過的線程數,如果發現Threads_created值過大的話,表明MySQL服務器一直在創建線程,這也是比較耗資源,可以適當增加配置文件中thread_cache_size值,查詢服務器thread_cache_size的值:      show variables like 'thread_cache_size';

# 通常mysql的最大連接數默認是100, 最大可以達到16384。
show variables like '%max_connection%'; 查看最大連接數
set global max_connections=200
SET GLOBAL innodb_lru_scan_depth=256;
影響對InnoDB緩沖池進行刷新操作的算法和啟發式的參數。性能專傢對調優I/ o密集型工作負載感興趣。它指定瞭每個緩沖池實例,在緩沖池LRU頁面下列出頁面清潔線程掃描以查找要刷新的臟頁的距離。這是每秒執行一次的後臺操作。`小於默認值的設置通常適用於大多數工作負載`。如果值遠高於必要值,可能會影響性能。隻有在典型工作負載下有空閑I/O容量時,才考慮增加該值。相反,如果寫密集的工作負載使I/O容量飽和,則減少該值,特別是在使用大型緩沖池的情況下。調優innodb_lru_scan_depth時,從一個較低的值開始,向上配置,目標是很少看到零空閑頁面。另外,當改變緩沖池實例數時,可以考慮調整innodb_lru_scan_depth,因為innodb_lru_scan_depth * innodb_buffer_pool_instances定義瞭頁面清理線程每秒執行的工作量。

show processlist;

show full processlist; 或 show processlist(默認隻列出前100); //顯示哪些線程正在運行

id       #ID標識,要kill一個語句的時候很有用
user     #當前連接用戶
host     #顯示這個連接從哪個ip的哪個端口上發出
db       #數據庫名
command  #連接狀態,一般是休眠(sleep),查詢(query),連接(connect)
time     #連接持續時間,單位是秒
state    #顯示當前sql語句的狀態
info     #顯示這個sql語句

show slave status \G;

MySQL同步功能由3個線程(master上1個,slave上2個)來實現。執行 DE>START SLAVEDE> 語句後,slave就創建一個I/O線程。I/O線程連接到master上,並請求master發送二進制日志中的語句。master創建一個線程來把日志的內容發送到slave上。這個線程在master上執行 DE>SHOW PROCESSLISTDE> 語句後的結果中的 DE>Binlog DumpDE> 線程便是。slave上的I/O線程讀取master的 DE>Binlog DumpDE> 線程發送的語句,並且把它們拷貝到其數據目錄下的中繼日志(relay logs)中。第三個是SQL線程,slave用它來讀取中繼日志,然後執行它們來更新數據。

用於提供有關從屬服務器線程的關鍵參數的信息

Slave_IO_State:		ID線程的狀態,如果master 的所有變更都已經收到這個狀態會顯示為 Waiting for master to send event
Master_Log_File:		IO線程正在讀取的master binlog 文件名
Read_Master_Log_Pos:	IO線程已經讀完的位置
Relay_Master_Log_File:	SQL線程正在讀取的master binlog 文件名
Exec_Master_Log_Pos:	SQL線程已經讀取完的位置
Slave_IO_State:
SHOW PROCESSLIST輸出的State字段的拷貝。
SHOW PROCESSLIST用於從屬I/O線程。如果線程正在試圖連接到主服務器,正在等待來自主服務器的時間或正在連接到主服務器等,本語句會通知您

日志

日志類型 寫入日志的信息
錯誤日志 記錄在啟動,運行或停止mysqld時遇到的問題
通用查詢日志 記錄建立的客戶端連接和執行的語句
二進制日志 記錄更改數據的語句
中繼日志 從復制主服務器接收的數據更改
慢查詢日志 記錄所有執行時間超過 long_query_time 秒的所有查詢或不使用索引的查詢
DDL日志(元數據日志) 元數據操作由DDL語句執行
# mysqlbinlog [options] logfile1 logfile2 ...
mysqlbinlog的選項
-d, --database=name      僅顯示指定數據庫的轉儲內容。
-o, --offset=#           跳過前N行的日志條目。
-r, --result-file=name   將輸入的文本格式的文件轉儲到指定的文件。
-R, --read-from-remote-server	指示mysqlbinlog命令從遠程服務器讀取日志文件
-s, --short-form         使用簡單格式(隻顯示SQL語句)。
--server-id 			 指定mysql服務器,確保是由給定服務器id的mysql服務器所生成的日志。
--set-charset=name       在轉儲文件的開頭增加'SET NAMES character_set'語句。
--start-datetime=name    轉儲日志的起始時間。
--stop-datetime=name     轉儲日志的截止時間。
-j, --start-position=#   轉儲日志的起始位置。
--stop-position=#        轉儲日志的截止位置。
-v, --verbose       	 用行事件重構偽sql語句。   
-vv  					 顯示sql語句加字段類型。

查看日志

mysqlbinlog --no-defaults --database=qq --start-datetime='2022-02-11 18:00:00' --stop-datetime='2022-02-11 20:00:00' --base64-output=decode-rows -v mysql-bin.000052 >18-20.log

增加 –base64-output=decode-rows –v 選項解析(目的:變成人類可以讀懂的SQL語句瞭)
使用base64-output選項,可以控制輸出語句何時是輸出base64編碼的BINLOG語句。以下是base64輸出設置的可能值:

never			//它將在輸出中顯示base64編碼的BINLOG語句
always			//隻要有可能,它將隻顯示BINLOG項
decode-rows	    //將把基於行的事件解碼成一個SQL語句
auto(默認)	    //僅為某些事件類型打印BINLOG項,例如基於行的事件和格式描述事件

總結

到此這篇關於MySQL查看數據庫狀態命令的文章就介紹到這瞭,更多相關MySQL查看數據庫狀態命令內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: