Multi-Version Concurrency Control 多版本并发控制,MVCC 是一种并发控制的方法,
一般在数据库管理系统中,实现对数据库的并发访问;在编程语言中实现事务内存。
实现原理
放在中间件的用户进程通过tcp/ip连接到服务器上,服务器给Oracle用户进程派生一个server的服务器进程 ,用户进程和服务器进程 两者建立连接(connect) 再通过身份验证之后 建立会话(session) ,server进程访问数据 实际上是访问数据库缓存区的某个数据块 ,该数据块记录了某一条数据 比如某个员工的工资记录 4300
现在用户进程中提交了一条sql语句(update) 将该员工的工资做出调整,变为5000,Oracle会将原数据4300拷贝至回滚段中保存 server进程将 原数据块中的数据 调整为5000 。如果事务未提交 则其他用户看不到修改
这时,另一个用户对工资信息 有需求进行查询 建立新的用户进程,服务进程连接到数据库缓存区中 。
这时候就会产生一个认知误区 认为Oracle读取的是回滚段中的4300数据,但实际上racle将5000数据块复制到一个空的buffer 进行操作-->使用回滚段将数据 恢复为4300
这时我们再数据库缓存区中一共拥有三个数据对象 分别是第一个用户修改过后的数据块 数值为5000
原数据块的回滚段 数值为4300,第二个用户访问的 原数据块的copy 并使用undo段进行恢复 数值为4300
对于 两个用户 其实连接的是同一个数据块 具有相同的DBA (数据块地址) ,用户1所连接的数据块 被称之为当前版本 (current)。
用户2所连接的数据块 被称之为过去版本 也被称之为CR block(一致性读 consistent read),这样使得 更新 不会阻塞查询 反之亦然,以上就是关系型数据库中的多版本并发控制 被称之为mvcc,想要查询更旧的数据 取决于undo中是否存在更旧的数据 也被称之为闪回查询
如图所示
腾科教育是华为授权的培训合作伙伴,专业提供华为ICT技术架构认证、平台与服务认证、行业服务认证等华为职业认证服务,连续多年荣获华为年度最佳合作伙伴贡献奖、华为优秀战略合作伙伴、上海HCIE精英俱乐部伙伴,连续多年举办腾科技术嘉年华华为专场,并协办华为ICT大赛、华为生态伙伴精英赛伙伴赛分赛场、华为人才双选会上海场等活动和赛事,提供面向华为生态合作伙伴和ICT学员的人才供需双选平台及ICT学员就业通道,培养ICT行业所需创新型、融合型人才。
腾科教育是华为优秀战略合作伙伴、红帽交付培训合作伙伴、思科优秀合作伙伴、红帽年度优秀合作伙伴、Oracle亚太区优秀合作伙伴,每年协办华为、红帽等厂商技术大赛,定期举办各种技术峰会等技术交流活动。同时也是培生集团(Pearson VUE)与Prometric(普尔文)两大全球国际考试中心授权的双国际电子考试中心,提供一站式ICT认证考试服务,十年来专注于为考生提供包括华为,思科,红帽,Oracle,VMware,ITIL,微软,Citrix等数千种ICT认证考试服务,每年通过腾科教育培训并参加HCIE(华为认证专家)、RHCA(红帽认证架构师)、OCM(甲骨文认证大师)等高级职业认证考试的学员,其通过率高达94.32%。