如果查询一个简单的语句,却长时间不回的话,可能出现的问题
mdl锁:使用show processlist,可以在state看得到是否被锁住了
- 设置performance_schema=on(比设置off会有10%的损耗),
- 通过查询sys.schema_table_lock_waits,然后kill掉即可
等flush
- 有可能存在的问题就是有一个表的sleep语句,然后刚好遇到了flush语句(被sleep阻塞了),flush阻塞了后面的select语句,使用show processlist查看
等行锁
- sessionA写操作锁住了行,然后刚好读到这行 就被阻塞住了,5.7以上版本用sys.innodb_lock_waits表查看
mysql> select * from t sys.innodb_lock_waits where locked_table='`test`.`t`'\G
查询慢:
- 没有加索引,数据量大,导致全表扫描慢
- 在查询的事务里面,当前行被update多次,然后从undo log中执行多次才将结果返回