内容
- 查询一行慢
- 索引失效
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.对于上述语句,如果发现查询比较慢,可以考虑下另外一种场景,可能是一致性读造作,例如如下场景:
session A在执行select * where id = 1时会依次执行undo 找到符合自己的那个版本数据,会执行100万次,所以会比较慢
未完待续...
引用:
《丁奇mysql45讲》