1.什么是 MVCC
MVCC 是多版本并发控制,通过对一个记录保存多个数据版本而不用加读锁的方式,保证了一定程度的并发能力。
innodb 的可重复隔离级别是根据事务 id,undolog 和 readview 实现的,通过这些判断记录对事务的可见性。
对于快照读,多版本并发控制把幻读问题解决了,但是对于当前读,比如 select...forupdate,update 和 delete,需要使用临键锁在范围的空隙内加锁避免新的插入。
2.慢查询排查
把过程分成定位,查询执行计划和优化和测试。
首先开启慢查询日志找到哪些慢语句,然后使用 explain 查看执行计划包括查看检索的行数,是否使用了索引。
如果没有合适的索引需要建立合适的索引,其次检查是否有对索引使用了函数列计算或者隐式类型转换以及联合索引没有符合最左前缀匹配原则的情况,根据这些去调整 SQL 语句;对于可以用联合索引检索的字段就可以避免回表,然后 select 不要查找*。
最后通过压测或者查看执行计划检查。
3.read 的过程
read 首先触发系统调用,cpu 从用户态切换到内核态,然后去 page cache 中检查是否有缓存要读的数据,page cache 是内核缓存存储磁盘中的一页,如果 hit 就直接把数据拷贝到用户缓冲空间返回,如果不存在就需要从磁盘读入 pagecache 再拷贝到内核缓存。
总结,数据库的八股有关于知识的比如 MVCC 实现也有操作的比如慢查询优化。