Mysql系列之查询慢(15)
session A 的第一个查询 由于可重复读事务隔离级别,查询的结果还会是update前的结果 由于mvcc多版本控制 update前的结果是通过回滚得来的。2.查询sys.schema_table_lock_waits(需要设置performance_schema=on)kill id kill掉对应的查询即可。session A 的第二个查询 事务隔离级别是当前读 所以查询结果会读到upda
查询慢
查询长时间不返回
可能原因如下
等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后的结果 这里可以直接返回
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)