八股学习 MVCC 慢查询优化和 read 过程

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 实现也有操作的比如慢查询优化。

相关推荐
APEX真好玩1 小时前
把高频传感器(IMU)数据封装进 MP4:FFmpeg 私有数据轨实践
c++
晴天的雨.9921 小时前
[C++算法]盛最多水的容器(双指针算法)
开发语言·c++·算法
布莱克6051 小时前
理解内存泄漏:成因、发现方法与解决策略(C++ 举例)
c语言·c++·内存泄漏
此生决int2 小时前
深入理解C++系列(19)——C++11(上)
开发语言·c++
郝学胜-神的一滴2 小时前
C++20模板元编程 05:吃透变参模板,解锁编译期万能参数能力
服务器·开发语言·c++·windows·vscode
C++ 老炮儿的技术栈12 小时前
我们在设计tcp协议时,要传一个字符串过去,报文:头十长度十内容,是否要把‘\0‘也填入,长度是否包含‘\0‘
开发语言·数据结构·c++·mfc·c
I_belong_to_jesus17 小时前
std::unique_ptr成员函数用法
c++
Tairitsu_H18 小时前
[C++] 拷贝构造还是赋值重载?类默认成员函数细节详解
开发语言·c++·类和对象
汉克老师19 小时前
GESP2026年9月认证C++四级( 第一部分选择题(1~7题)精讲
c++·gesp·小学生·学c++编程