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

相关推荐
dtq04249 小时前
C++小案例 - 日志实战
开发语言·c++
码匠许师傅10 小时前
【C++三方组件】Qt 概览:桌面 C++ 的事实标准与许可证三轨
开发语言·c++·qt
码匠许师傅11 小时前
【C++三方组件】POCO:跨平台系统编程全家桶
开发语言·c++
蒸蒸yyyyzwd11 小时前
kafka、redis、mysql不熟悉问题总结
笔记·八股
WBluuue13 小时前
数据结构与算法:分块(一):块状数组、块状链表
数据结构·c++·算法·链表
必须得开心呀15 小时前
字节序大小端科普
c++·程序人生
会编程的小孩15 小时前
C++ 子集
c++
SunkingYang16 小时前
C++20 vs C++17:新特性对比与用法指南
c++·c++20·特性·版本·新特性·对比·c++17
前进吧-程序员16 小时前
C++20 协程入门实战:从 co_await 到一个 100 行的异步任务调度器
网络·c++·c++20
前进吧-程序员16 小时前
实战:C++20 协程 + io_uring 写一个 400 行的 echo server
网络·c++·c++20