mysql笔记
2021-02-24 16:36:41 12 举报
主从复制、事务隔离实现、索引等笔记
作者其他创作
大纲/内容
隐藏字段:事务id
意向共享锁
1 线程A修改 张三->李四2 线程B读取到 李四3 此时线程A发生错误,回滚为张三,此时线程B读取的算是脏数据
好处
监控
覆盖索引
实现
锁
slave db
读取
IO thread
主从复制
隐藏字段:undolog指针
减少数据扫描量
MVCC
write
记录锁(Record Lock)、间隙锁(Gap Lock)、临界锁(Next-key Lock)
线程B
共享锁
线程A
id=1 name=\"王五\"->id=1 name=\"王五\"id = 2 name=\"张三\"
事务隔离级别的实现
被读取的事务id<最小活跃事务id
事务隔离级别
同一个事务内,多次读取到的结果一致
事务刚开始时,获取快照读(read view),后续不再获取
第一次读第二次读
间隙锁
幻读
节点高度不超过1
原则
性能
优化角度
添加
排他锁
读事务id在最小和未来事务id之间,且不在活跃事务id集合内
优化
修改
索引
连接池
master db
意向排他锁
线程A的修改操作未提交之前,操作结果对其他线程不可以
算法
快照读
RR(可重复读)
自增锁
安全
sql thread
临界锁
其余
1 线程B第一次读取到张三2 线程A修改张三->李四3 线程B第二次读取到李四,此时线程B两次读取不一样
最左匹配原则
记录锁
缓存
聚集索引/非聚集索引
bin log
离散率越高越好
relay log
非叶子节点不存储记录
路数=页大小/(key大小+指针等)
串行化、可重复读
类型
减少死锁
多路平衡二叉树
记录锁(Record Lock)
某些场合,随机IO变为顺序IO
MVCC可解决RR级别下的幻读问题锁也可以(临界锁)
read
不可重复读
id = 2name = \"张三\"->\"李四\"
B+树
sql dump thread
replay
事务中,每次读操作时,都会获取快照读(read view)
联合索引时,最多使用/长度小的放在左边
脏读
RC(读已提交)
被读取的事务id<当前读事务id
1 线程B第一次读取到王五2 线程A添加张三3 线程B第二次读取到王五和张三
结构
0 条评论
下一页