Mysql——case分析

内容

  • 查询一行慢
  • 索引失效

1.查询一行慢

当查询类似

select * where id = 1;

的语句时,发现长时间不返回,那可以从以下三个方面排查:

  • 1.在等待dml 读锁,可能有事务长时间持有该表的dml写锁;
  • 2.在等待flush;
  • 3.等待行锁;
    上述1.2中场景可以根据 show processlist; info字段查看相关信息,然后可以把阻塞线程给kill掉;对于场景3,如果是mysql5.7的话可以根据如下语句分析出那个线程占有着写锁;
mysql> select * from t sys.innodb_lock_waits where locked_table='`test`.`t`'\G
  • 4.对于上述语句,如果发现查询比较慢,可以考虑下另外一种场景,可能是一致性读造作,例如如下场景:


    image.png

    session A在执行select * where id = 1时会依次执行undo 找到符合自己的那个版本数据,会执行100万次,所以会比较慢

未完待续...
引用:
《丁奇mysql45讲》

你可能感兴趣的:(Mysql——case分析)