Mysql
目录
事务的特征
- 原子性
- undo log 出现错误回滚业务
- 隔离性
- 写写操作、
- 通过锁来实现
- 写读操作
- MVCC
- 写写操作、
- 持久性
- 由redo log实现
- 预写式log 追加模式速度很快 要比mysql的随机写入快很多
- 缓冲区中
- 0 每秒同步一次
- 1 事务提交同步写入 一般使用1
- 2 一步写入
- 一致性
MVCC (多版本并发控制)
版本链与Undo log
- 事务id 该条记录的事务 trx id
- 回滚指针 记录着上一条记录的地址
- readview 快照读 区别于当前读 当前读的一般为写入与更新中 指导mysql具体取那条数据
readview数据结构
- m ids 当前活跃的事务id
- min trx id 最小的活跃事务id
- max trx id 最大的活跃id
- creaor trx id
ReadView如何判断版本链中的记录可用呢
版本链中的
- trx_id == creator id 可用
- trx_id < min_id 早于当前的事务的事务都已提交 可以获取
- trx_id > max_id 当前的事务是在活动事务之后的 不可获取
- min_trx_id <= trx_id<=max_trx_id 如果事务在m_ids中 不可以访问 如果不在那么可以访问
RR可重复读 RC读已提交
- 可重复读的快照读 是在事务开始的时候进行的 公用一个快照读
- 读已提交 在每个select都要生成readview 容易出现不可重复读问题 会读到已经提交的事务
大量数据的优化
最左前缀法则
- 索引创建的
索引
数据结构原理
B+树的结构 叶子结点由双向链表相连
- 飞叶子节点不存储数据
- 只在叶子结点存储数据并且 叶子结点由双向链表链接 避免了回查这一问题