資料庫Mysql_學習筆記(三)
技術標籤:資料庫學習筆記
第三章Mysql資料庫效能
3.1 Mysql資料庫的效能監控
3.1.1mysql連線數
連線數指使用者已經建立了多少個連線數,mysql通過執行SHOW PROCESSLIST命令輸出資料庫中執行著的執行緒個數詳情,SHOW PROCESSLIST預設只顯示100條,如果需要顯示超過100條記錄,需要執行SHOWFULLPROCESSLIST
資料庫支援的最大連線數:SHOW VARIABLES like 'max_connections'
當前已使用的最大連線數:SHOW GLOBAL STATUS like 'Max_used_connections'
3.1.2mysql資料庫當前執行的事務與鎖
事務是對資料庫執行的一種帶有原子性、一致性、隔離性、永續性的資料操作。
在Mysql中如果需要事務,那麼資料庫儲存時必須選用Mysql的innodb引擎,使用Innodb引擎後,在mysql系統資料庫中information_schmea的innodb_trx表中記錄了資料庫正在執行的事務。
欄位 | 說明 |
---|---|
trx_id | 事務ID |
trx_state | 事務的狀態 :Running,LockWait,RollingBack和Commiting等 |
trx_started | 事務開始執行時間 |
trx_requested_lock_id | 事務需要等待的、但是已經被別的程式鎖定的資源id,一般可以和innodb_locks表關聯在一起,獲取更多的被鎖定的資源的詳細資訊 |
trx_wait_started | 事務開始等待時間 |
trx_weight | 事務的權重 |
trx_mysql_thread_id | 事務對應的mysql執行緒id |
trx_query | 事務正在執行的sql語句 |
trx_operation_state | 事務操作的狀態 |
trx_tables_in_use | 事務使用到的資料庫表的數量 |
trx_tables_locked | 事務鎖定的資料庫表的數量 |
trx_lock_structs | |
trx_lock_memory_bytes | 事務鎖住的記憶體大小 |
trx_rows_locked | 事務鎖定的資料記錄行數 |
trx_rows_modified | 事務更改的資料記錄行數 |
trx_concurrency_tickets | 事務併發票數 |
trx_isolation_level | 事務的隔離級別:一般分為ReadUncommited(未提交讀取),ReadCommited (已提交讀取) ,RepeatedRead(可重複讀取),Serializable(序列化)四種不同級別 |
trx_unique_checks | 事務是否開啟唯一性檢查標識 |
trx_foreign_key_checks | 事務是否開啟外來鍵檢查標識 |
trx_last_foreign_key_error | 事務最後一次外來鍵檢查的錯誤 |
trx_adaptive_hash_latched | |
trx_adaptive_hash_timeout | |
trx_is_read_only | |
trx_autocommit_non_locking |
Mysql系統資料庫information_schmea的innodb_locks表中記錄innodb資料庫引擎當前產生的鎖的情況。
Mysql 8.0鎖的觀測https://blog.csdn.net/n88Lpo/article/details/108211411
欄位 | 說明 |
---|---|
lock_id | 鎖的ID |
lock_trx_id | 擁有鎖的事務ID,可以與Innodb_trx連結串列查詢,獲取事務詳細資訊 |
lock_mode | 鎖的模式: 行級鎖:包括S(共享鎖),X(排他鎖),IS(意向共享鎖),IX (意向排他鎖) 表級鎖:包括S_GAP(共享間隙鎖),X_GAP(排他間隙鎖),IS_GAP(意向共享間隙鎖),IX_GAP(意向排他間隙鎖),AUTO_INC(自動遞增鎖) 頁級鎖 :介於行級鎖和表級鎖之間的一種鎖 |
lock_type | 鎖的型別,包括RECORD(行級鎖),TABLE(表級鎖),PAGE(頁級鎖),innodb引擎中主要採用行級鎖; |
lock_table | 當前被鎖定的或者包含鎖定記錄的表的名稱 |
lock_index | 當lock_type為RECORD時,表示鎖定的索引的名稱,否則直接返回NULL |
lock_space | 當lock_type為RECORD時,表示鎖定的表空間ID,否則直接返回NULL |
lock_page | 當lock_type為RECORD時,表示鎖定的記錄行的頁數,否則直接返回NULL |
lock_rec | 當lock_type為RECORD時,表示鎖定的資料行的數量 |
lock_data | 當lock_type為RECORD時,表示鎖定的記錄行的主鍵 |
Mysql系統資料庫information_schmea的innodb_lock_waits表中記錄innodb資料庫引擎當前執行的資料庫事務等待鎖的情況。
欄位 | 說明 |
---|---|
requesting_trx_id | 請求事務的id |
requested_lock_id | 事務所等待的鎖的id,可以和innodb_locks表關聯查詢 |
blocking_trx_id | 阻塞事務的ID |
blocking_lock_id | 阻塞了另一事務的、正在執行的事務的鎖的ID |
資料庫中出現死鎖時,經常需要通過查詢innodb_trx,innodb_locks和innodb_lock_waits來找出在執行什麼事務操作時導致了死鎖,例如執行如下SQL語句可以列出資料中所有事務的等待和鎖定記錄
--這裡有sql語句