DBA第一期
Posted 学园IT
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DBA第一期相关的知识,希望对你有一定的参考价值。
什么是MVCC?
多版本并发控制。MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问;在编程语言中实现事务内存。
如果有人从数据库中读数据的同时,有另外的人写入数据,有可能读数据的人会看到『半写』或者不一致的数据。有很多种方法来解决这个问题,叫做并发控制方法。最简单的方法,通过加锁,让所有的读者等待写者工作完成,但是这样效率会很差。
MVCC 使用了一种不同的手段,每个连接到数据库的读者,在某个瞬间看到的是数据库的一个快照,写者写操作造成的变化在写操作完成之前(或者数据库事务提交之前)对于其他的读者来说是不可见的。
当一个 MVCC 数据库需要更一个一条数据记录的时候,它不会直接用新数据覆盖旧数据,而是将旧数据标记为过时(obsolete)并在别处增加新版本的数据。这样就会有存储多个版本的数据,但是只有一个是最新的。这种方式允许读者读取在他读之前已经存在的数据,即使这些在读的过程中半路被别人修改、删除了,也对先前正在读的用户没有影响。这种多版本的方式避免了填充删除操作在内存和磁盘存储结构造成的空洞的开销,但是需要系统周期性整理(sweep through)以真实删除老的、过时的数据。对于面向文档的数据库(Document-oriented database,也即半结构化数据库)来说,这种方式允许系统将整个文档写到磁盘的一块连续区域上,当需要更新的时候,直接重写一个版本,而不是对文档的某些比特位、分片切除,或者维护一个链式的、非连续的数据库结构。
MVCC 提供了时点(point in time)一致性视图。
MVCC 并发控制下的读事务一般使用时间戳
或者事务
ID
去标记当前读的数据库的状态(版本),读取这个版本的数据。读、写事务相互隔离,不需要加锁。读写并存的时候,写操作会根据目前数据库的状态,创建一个新版本,并发的读则依旧访问旧版本的数据。
一句话讲,MVCC就是用
同一份数据临时保留多版本的方式
的方式,实现并发控制。这里留意到 MVCC 关键的两个点:
在读写并发的过程中如何实现多版本;
在读写并发之后,如何实现旧版本的删除(毕竟很多时候只需要一份最新版的数据就够了);
有什么作用?
读不阻塞写,提高并发性;
MVCC实现原理(Innodb引擎)
核心思想:每条数据有多个数据快照,对应不同的版本(使用事务ID标识),事务A读物的数据为事务A的ID对应的数据快照,事务B写入数据时生成新的数据快照,并用事务B的ID进行标识。
Innodb引擎中,每条记录有隐藏的3列:
DB_TRX_ID:事务ID;
DB_ROLL_PTR :回滚指针;
DB_ROW_ID :列ID;
以上是关于DBA第一期的主要内容,如果未能解决你的问题,请参考以下文章