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讲