Mysql出現waiting for table metadata lock的原因和解決方案


對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,問題解決。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM