查询慢

查询长时间不返回
可能原因如下

等mdl锁

1.执行show processlist查看 等待mdl锁
在这里插入图片描述
2.查询sys.schema_table_lock_waits(需要设置performance_schema=on)kill id kill掉对应的查询即可
在这里插入图片描述

等flush

1.执行show processlist 表示有线程对表在做flush
在这里插入图片描述
常用flush操作(正常会比较快)
flush tables t with read lock; 表示对表t做flush
flush tables with read lock; 表示对所有打开的表做flush

2.此时可能是flush被其他线程堵塞了 kill掉对应的查询即可
在这里插入图片描述

等行锁

查询时需要对行加读锁,此时如果有另一个事务持有写锁,则查询会被堵塞
1.尝试show processlist
2.查询sys.innodb_lock_waits表 kill掉堵塞的线程
select * from t sys.innodb_lock_waits where locked table=test’.'t"

查询慢

当前读快于一致性读

session A 的第一个查询 由于可重复读事务隔离级别,查询的结果还会是update前的结果 由于mvcc多版本控制 update前的结果是通过回滚得来的
session A 的第二个查询 事务隔离级别是当前读 所以查询结果会读到update后的结果 这里可以直接返回
在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐