對mysql數據庫中的某張表執行更改或查詢操作時,
有時會出現卡死的情況,
show PROCESSLIST 查看進程,發現進程中的指令處於waiting for table metadata lock 鎖的狀態,
這時kill 掉這個進程可以暫時解決卡死的問題。
出現這種現象的原因是在這個表中有處於未提交的事務,
解決方案:
使用管理員權限登錄mysql數據庫查看未提交的事務:select * from information_schema.innodb_trx\G;
(如果不是管理員權限會報錯:Access denied; you need (at least one of) the PROCESS privilege(s) for this operation),
這時會看到未提交的事務,有以下相關信息:
- trx_state: 事務狀態,一般為RUNNING
- trx_started: 事務執行的起始時間,若時間較長,則要分析該事務是否合理
- trx_mysql_thread_id: MySQL的線程ID,用於kill
- trx_query: 事務中的sql
kill 掉線程ID,問題解決。