Mysql執行查詢語句慢的解決方式


MySQL使用的是InnoDB引擎。不同於MyISAM引擎只提供表鎖,InnoDB提供不同級別的鎖。但是在我們日常的操作過程中經常由於對數據庫不當的SQL操作導致出現長時間的鎖,造成其他的SQL語句長期等待執行。這種現象對於數據庫的正常使用帶來的極大的阻礙。接下來我們就來介紹如何排查當前實例是否出現該狀態。

show processlist

如下圖所示

各字段的含義:

      id,該進程的標識;

      user,顯示當前用戶;

      host,顯示來源IP和端口;

      db,顯示當前連接的數據庫;

      command,顯示當前連接的執行的命令,一般就是休眠(sleep),查詢(query),連接(connect);

      time,此這個狀態持續的時間,單位是秒;

      state列,顯示使用當前連接的sql語句的狀態,很重要的列;

      info,顯示這個sql語句,因為長度有限,所以長的sql語句就顯示不全,但是一個判斷問題語句的重要依據。

      

       當如果用戶某個SQL正在query導致別的SQL等待鎖的時候,別的SQL的state狀態會出現”Waiting for table metadata lock“,如果出現這種情況就會導致大量SQL堆積,實例狀態出現異常,因此這個時候就需要用戶去根據前面的id,去kill掉導致其他SQL等待鎖的正在query的語句,然后其他語句即會正常執行。

 


免責聲明!

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



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