西安建设工程中心交易网站,做系统去哪个网站,修改wordpress logo,商城网站建设预算要多少钱#xff08;笔记总结自b站马士兵教育课程#xff09;
一、简介
MVCC#xff1a;全称multi-version Concurency control#xff0c;多版本并发控制#xff0c;是为了解决并发读写问题存在的。MVCC的实现原理由三部分组成#xff1a;隐藏字段、undolog、readview。 二、概…笔记总结自b站马士兵教育课程
一、简介
MVCC全称multi-version Concurency control多版本并发控制是为了解决并发读写问题存在的。MVCC的实现原理由三部分组成隐藏字段、undolog、readview。 二、概念补充
当前读读取的总是最新的数据例如update、insert、delete等等。
快照读读取的是历史的数据例如select。
数据库并发场景
①读读不会产生任何问题也不需要进行并发控制。
②读写会存在数据安全问题比如脏读、幻读、不可重复读可以通过加锁的方式来解决但是会存在性能安全问题。
③写写会存在数据安全问题比如更新丢失问题。 三、隐藏字段和undolog
mysql所对应的行记录除了我们自定义的字段之外mysql会默认的添加一些隐藏字段对于用户是不可见的。
DB_TRX_ID创建这条记录或者最后一次修改该记录的事务idDB_ROLL_PTR回滚指针指向这条记录的上一个历史版本DB_ROW_ID隐藏主键当表创建的时候没有设置主键那么会生成一个6字节的rowid
事务idmysqlserver自动赋值并且是递增的
事务1新增一条记录
nameageDB_TRX_IDDB_ROLL_PTRDB_ROW_IDABC101NULL1
undolog回滚日志表示在进行insert、delete、update操作的时候产生的方便回滚的事务。
事务2修改nameDEF
nameageDB_TRX_IDDB_ROLL_PTRDB_ROW_IDDEF1020x1231
此时undolog代码块 nameageDB_TRX_IDDB_ROLL_PTRDB_ROW_IDABC101NULL1 事务2中的DB_ROLL_PTR 中的地址记录的是事务1版本的数据在undolog的数据。
事务3修改age12
nameageDB_TRX_IDDB_ROLL_PTRDB_ROW_IDDEF1230x4561
此时undolog代码块 nameageDB_TRX_IDDB_ROLL_PTRDB_ROW_IDDEF1020x1231 nameageDB_TRX_IDDB_ROLL_PTRDB_ROW_IDABC101NULL1 事务3中的DB_ROLL_PTR 中的地址记录的是事务2版本的数据在undolog的数据,事务2中的DB_ROLL_PTR 中的地址记录的是事务1版本的数据在undolog的数据。
我们发现undolog最终会变成一个链表链首表示的是最新的旧纪录链尾表示的是最旧的旧纪录undolog链表不会无限增加后台有一个purge的线程来对undolog进行维护当不需要的时候就会进行删除在undolog删除的时候会分为两类insert对应一类undolog只要事务提交就可以删除update、delete对应一类undolog除了事务提交之后还要保证mvcc不用才会删除。