MySQL查詢何時會被阻塞
- 由於沒有拿到MDL讀鎖
可以通過show processlist
命令查看線程狀態爲:Waiting for table metadata lock
,這時需要找到鎖住這個表的線程,通過select blocking_pid from sys.schema_table_lock_waits,
然後kill掉對應的線程即可。 - 被flush阻塞
這時show processlist
顯示線程的狀態爲Waiting for table flush
。Flush語句用於關閉打開的表,這時可能的情況是:有一個flush tables命令被別的語句堵住了,然後它又堵住了我們的select語句 - 被行鎖阻塞
通過Select lock in share mode
進行查詢時
MySQL實戰45講