SELECT * FROM information_schema.innodb_trx 命令是用來查看當前運行的所以事務:
在執行結果中可以看到是否有表鎖等待或者死鎖,如果有死鎖發生,可以通過下面的命令來殺掉當前運行的事務:
KILL 165667 ; KILL 后面的數字指的是 trx_mysql_thread_id 值。
mysql> show status like 'innodb_row_lock_%'; +-------------------------------+-----------+ | Variable_name | Value | +-------------------------------+-----------+ | Innodb_row_lock_current_waits | 2 | | Innodb_row_lock_time | 334377476 | | Innodb_row_lock_time_avg | 50678 | | Innodb_row_lock_time_max | 51974 | | Innodb_row_lock_waits | 6598 | +-------------------------------+-----------+ 解釋如下: Innodb_row_lock_current_waits : 當前等待鎖的數量 Innodb_row_lock_time : 系統啟動到現在,鎖定的總時間長度 Innodb_row_lock_time_avg : 每次平均鎖定的時間 Innodb_row_lock_time_max : 最長一次鎖定時間 Innodb_row_lock_waits : 系統啟動到現在總共鎖定的次數
desc information_schema.innodb_locks; +-------------+---------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------+---------------------+------+-----+---------+-------+ | lock_id | varchar(81) | NO | | | |#鎖ID | lock_trx_id | varchar(18) | NO | | | |#擁有鎖的事務ID | lock_mode | varchar(32) | NO | | | |#鎖模式 | lock_type | varchar(32) | NO | | | |#鎖類型 | lock_table | varchar(1024) | NO | | | |#被鎖的表 | lock_index | varchar(1024) | YES | | NULL | |#被鎖的索引 | lock_space | bigint(21) unsigned | YES | | NULL | |#被鎖的表空間號 | lock_page | bigint(21) unsigned | YES | | NULL | |#被鎖的頁號 | lock_rec | bigint(21) unsigned | YES | | NULL | |#被鎖的記錄號 | lock_data | varchar(8192) | YES | | NULL | |#被鎖的數據 +-------------+---------------------+------+-----+---------+-------+
desc information_schema.innodb_lock_waits; +-------------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------------+-------------+------+-----+---------+-------+ | requesting_trx_id | varchar(18) | NO | | | |#請求鎖的事務ID | requested_lock_id | varchar(81) | NO | | | |#請求鎖的鎖ID | blocking_trx_id | varchar(18) | NO | | | |#當前擁有鎖的事務ID | blocking_lock_id | varchar(81) | NO | | | |#當前擁有鎖的鎖ID +-------------------+-------------+------+-----+---------+-------+
desc information_schema.innodb_trx; +----------------------------+---------------------+------+-----+---------------------+-------+ | Field | Type | Null | Key | Default | Extra | +----------------------------+---------------------+------+-----+---------------------+-------+ | trx_id | varchar(18) | NO | | | |#事務ID | trx_state | varchar(13) | NO | | | |#事務狀態: | trx_started | datetime | NO | | 0000-00-00 00:00:00 ||#事務開始時間; | trx_requested_lock_id | varchar(81) | YES | | NULL ||#innodb_locks.lock_id | trx_wait_started | datetime | YES | | NULL | |#事務開始等待的時間 | trx_weight | bigint(21) unsigned | NO | | 0 | |# | trx_mysql_thread_id | bigint(21) unsigned | NO | | 0 ||#事務線程ID | trx_query | varchar(1024) | YES | | NULL | |#具體SQL語句 | trx_operation_state | varchar(64) | YES | | NULL ||#事務當前操作狀態 | trx_tables_in_use | bigint(21) unsigned | NO | | 0 ||#事務中有多少個表被使用 | trx_tables_locked | bigint(21) unsigned | NO |