我的妈呀!这么棒系列!!!之-------数据库优化(INNODB介绍)

1.逻辑存储结构

表–》段–》区–》页–》行
在这里插入图片描述

2.架构

在这里插入图片描述

2.1内存结构

2.1.1 缓冲区(Change Pool)

在这里插入图片描述

2.1.2 changeBuffer(更改缓冲区)

主要是针对二级索引:减少io操作
在这里插入图片描述

2.1.3 自适应hsah索引(Adaptive Hash Index)

优化缓冲区数据查询
在这里插入图片描述

2.2.4日志缓冲区

保存写入磁盘中的log日志数据
在这里插入图片描述

2.2 磁盘结构

在这里插入图片描述在这里插入图片描述

2.3 后台线程

在这里插入图片描述

3.事务原理

  • 事务:一组操作的集合,是一个不可分割的工作单位,它是一起成功或者一起失败
  • 特性(ACID):
    • 原子性:不可分割最小单位,同生死
    • 一致性: 事务完成时,必须所有数据保持一致状态
    • 隔离性:数据库系统提供隔离机制,保证事务不在外部并发操作性影响下独立环境运行
    • 持久性:事务一旦提交或者回滚,他对数据的改变就是永久的

3.1 如何实现呢?

在这里插入图片描述

3.1.1持久性:redo log(重做日志)

主要是发生内存刷新到磁盘发生错误
在这里插入图片描述

3.1.2 原子性:undo log(回滚日志)

记录数据被修改前的信息
作用:回滚和MVCC(多版本并发控制)
在这里插入图片描述

3.1.3 隔离性和一致性

在这里插入图片描述

4.MVCC

  • 当前读: 读取最新版本,对读取记录加锁,保证其他并发事务不能修改当前记录。共享锁、排他锁
  • 快照读:(就是select不加锁)读取记录数据的可见版本(有可能是历史数据),不加锁,非阻塞读。
    • 读已提交:每次select,都生成一个快照读
    • 可重复读:开启事务后第一个selcte语句
    • 序列化:快照度退化为当前读

4.1介绍

Muti-version Concurrency Control 多版本并发控制:维护一个数据多个版本,使得读写操作没有冲突,快照读为Mysal实现MVCC提供了一个非阻塞功能。

4.2实现依赖

4.2.1三个隐式字段

在这里插入图片描述

4.2.2 undo log

回滚日志,在insert、update、delete时数据回滚
insert时产生的日志只在回滚是需要,事务提交后可以被立即删除。但update和delete不仅回滚需要,快照读时也需要,不会被立即删除。
生成版本链
在这里插入图片描述

4.2.3 readView

读视图是快照读SQL执行MVCC提取数据依据,记录并维护当前活跃的事务(未提交)的id
核心字段
在这里插入图片描述

4.3MVCC实现原理

readView 详解
trx_id:当前事务id
在这里插入图片描述
但它生成时机因隔离级别不同而不同

读已提交:事务每一次执行快照读时产生
在这里插入图片描述
过程解析(第一次):
在这里插入图片描述
可重复读:仅在第一次事务执行快照读时生成,后续复用它。
在这里插入图片描述
过程解析:两个版本都一样,结果也一样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值