栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

mysql事务的实现原理(mysql实现原理)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

mysql事务的实现原理(mysql实现原理)

1.mysql事务基本概念

事务特性 ACID

A 原子性

I 隔离性

D 持久性

C 一致性

并发问题

脏读 读取到未提交的数据。

不可重复读 两次读取结果不同

幻读 select操作得到的结果所表征的数据状态无法支撑后续的业务操作。

隔离级别

2.mysql事务实现原理

MVCC

●多版本并发控制

●解决读写冲突

●隐藏列

当前读

Select for update 来获取当前的记录的最新版本,

除了表本身的列外,还有两个隐藏列 DB_TRX_ID和DB_ROLL_PIR。

快照读

普通的select 就是只去查询当前的某一个TRX_ID 造成可重复读。

##########MVCC#########

通过进行可见性判断

》创建快照的这一刻,还没提交的事务;

》创建快照之后创建的事务

Read View

》快照读 活跃事务列表

》列表中最小事务ID

》列表中最大事务ID

############UNDO LOG#############

》回滚日志,用来保证事务的原子性

》实现数据多版本

》delete undo log:用于回滚,提交即清理

》update undo log 用于回滚,同时实现快照读,不能随便删除。

提问:

undo log如何清理?

依据系统最小的活跃事务ID Read view,在最小事务ID前的就可以删除。

############REDO LOG##############

记录数据的修改

用于异常恢复的场景

循环写文件

》Write Pots 写入位置

》Check Points 刷盘位置

》Check Point->Write Pots 待落盘数据

##redo log写入流程

》记录页的修改,状态为prepare

》事务提交。将事务记录为commit状态

 ###刷盘时机

刷盘时机 代表着数据的可靠性,将数据写到磁盘里。

innodb_flush_log_at_trx_commit

有三种刷盘方式:

(1)事务提交后,将数据放在Log Buffer(DB)里,每1s落盘一次,如果db挂掉,就丢失1s的数据;

(2)事务提交后,实时将数据进行落盘,这样性能较差;

(3)事务提交后,将数据放在OS Buffer里,每1s落盘一次,如果OS挂掉,就丢失1s的数据;(OS挂掉的概率小于DB挂,因此选择此方法)。

redo log 的意义

》体积小,记录页的修改。比写入页代价低;

》末尾追加。随机写变顺序写,发生改变的页不固定。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/773213.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号