asp.net商务网站 包括哪些文件成都网站建设公司
web/
2025/9/29 16:07:05/
文章来源:
asp.net商务网站 包括哪些文件,成都网站建设公司,常州网络网站建设,工信部网站实名认证怎么做介绍
MVCC#xff0c;全称 Multi-Version Concurrency Control#xff0c;即多版本并发控制 MVCC的目的主要是为了提高数据库并发性能#xff0c;用更好的方式去处理读-写冲突#xff0c;做到即使有读写冲突时#xff0c;也能做到不加锁。 这里的多版本指的是数据库中同时…介绍
MVCC全称 Multi-Version Concurrency Control即多版本并发控制 MVCC的目的主要是为了提高数据库并发性能用更好的方式去处理读-写冲突做到即使有读写冲突时也能做到不加锁。 这里的多版本指的是数据库中同时存在多个版本的数据并不是整个数据库的多个版本而是某一条记录的多个版本同时存在。 优势 提高并发性能读操作不会阻塞写操作写操作也不会阻塞读操作有效地提高数据库的并发性能。 降低死锁风险由于无需使用显式锁来进行并发控制MVCC可以降低死锁的风险。 当前读和快照读
当前读
在MySQL中当前读是一种读取数据的操作方式它可以直接读取最新的数据版本读取时还要保证其他并发事务不能修改当前记录会对读取的记录进行加锁。MySQL提供了两种实现当前读的机制
一致性读Consistent Read 默认隔离级别下可重复读MySQL使用一致性读来实现当前读。 在事务开始时MySQL会创建一个一致性视图Consistent View该视图反映了事务开始时刻数据库的快照。 在事务执行期间无论其他事务对数据进行了何种修改事务始终使用一致性视图来读取数据。 这样可以保证在同一个事务内多次查询返回的结果是一致的从而实现了当前读。 锁定读Locking Read 锁定读是一种特殊情况下的当前读方式在某些场景下使用。 当使用锁定读时MySQL会在执行读取操作前获取共享锁或排他锁以确保数据的一致性。 共享锁Shared Lock允许多个事务同时读取同一数据而排他锁Exclusive Lock则阻止其他事务读取或写入该数据。 锁定读适用于需要严格控制并发访问的场景但由于加锁带来的性能开销较大建议仅在必要时使用。 快照读 快照读是在读取数据时读取一个一致性视图中的数据MySQL使用 MVCC 机制来支持快照读。 具体而言每个事务在开始时会创建一个一致性视图Consistent View该视图反映了事务开始时刻数据库的快照。这个一致性视图会记录当前事务开始时已经提交的数据版本。 当执行查询操作时MySQL会根据事务的一致性视图来决定可见的数据版本。只有那些在事务开始之前已经提交的数据版本才是可见的未提交的数据或在事务开始后修改的数据则对当前事务不可见。 像不加锁的 select 操作就是快照读即不加锁的非阻塞读。 快照读可能读到的并不一定是数据的最新版本而有可能是之前的历史版本。 注意快照读的前提是隔离级别不是串行级别在串行级别下事务之间完全串行执行快照读会退化为当前读 MVCC主要就是为了实现读-写冲突不加锁而这个读指的就是快照读是乐观锁的实现。
MVCC 原理解析
隐式字段
MySQL中的行数据除了我们肉眼能看到的字段之外其实还包含了一些隐藏字段它们在内部使用默认情况下不会显示给用户。 Undo Log
上文提到了 Undo 日志这个 Undo 日志是 MVCC 能够得以实现的核心所在。
Undo日志Undo Log是MySQL中的一种重要的事务日志Undo日志的作用主要有两个方面
事务回滚当事务需要回滚时MySQL可以通过Undo日志中的旧值将数据还原到事务开始之前的状态保证了事务回滚的一致性。 MVCC实现MVCC 是InnoDB存储引擎的核心特性之一。通过使用Undo日志MySQL可以为每个事务提供独立的事务视图使得事务读取数据时能看到一致且符合隔离级别要求的数据版本。
待续…
版本链 在MVCC中对于每次更新操作旧值会被保存到一条undo日志中即使它是该记录的旧版本。随着更新次数的增加所有的版本都会通过roll_pointer属性连接成一个链表称之为版本链。 版本链的头节点代表当前记录的最新值。此外每个版本还包含生成该版本的事务ID。 Read View
一致性视图全称 Read View 是用来判断版本链中的哪个版本对当前事务是可见的
Read View 是事务进行快照读操作时候生成的读视图Read View在该事务执行快照读的那一刻会生成数据库系统当前的一个快照记录并维护系统当前活跃事务的ID每个事务开启时都会被分配一个ID这个ID是递增的。
注意 Read View只针对 RC 和 RR级别
Read Uncommitted 和 Serializable 隔离级别下的事务规则不涉及基于 Read View 的可见性判断。RU 允许脏读而 Serializable 则通过锁机制保证串行执行。因此在这两个隔离级别下不需要创建或使用 Read View。
RC 和 RR 下的 Read View
RC每次 SELECT 数据前都生成一个ReadView。 RR只在第一次读取数据时生成一个ReadView后面会复用第一次生成的。
在 RC 隔离级别下每个快照读都会生成并获取最新的 Read View而在 RR 隔离级别下则是只在第一个快照读创建Read View之后的快照读获取的都是同一个Read View
RR 级别下能否防止幻读
严谨的说RR 级别下只能防止部分幻读 mysql数据库 InnoDB 下 隔离级别为可重复读 可以防止幻读。
使用的是间隙锁 (锁定记录范围)
待续…
参考MVCC详解
RR和RC的区别
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/83983.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!