Windows和Linux都有的Copy-on-write技术
MySQL技术内幕Innodb存储引擎第2版 P375
SQL Server2008 实现与维护(MCTS教程)P199
LVM快照技术
LVM使用写时复制copy-on-write技术来创建快照,当创建一个快照时,仅复制原始卷中数据的元数据metadata,并不会有数据物理操作,因此快照创建过程非常快。当快照创建完成,原始卷上有写操作时,快照会跟踪原始卷块的改变,将要改变的数据在改变之前复制到快照预留空间里,因此这个原理的实现叫写时复制。对于快照读取操作,如果读取的数据块是创建快照后没有修改过的,那么会重定向读取操作到原始卷,如果读取的是已经修改过的块,读取保存在快照中该块在原始卷改变之前的数据,简单来将就是读取快照中的数据,因此采用写时复制机制保证了读取快照得到的数据和快照和快照创建时一致
简单来讲:
写:有变更写快照,无变更不写快照,写快照是变更之前的版本
SQL Server的快照技术
SQL Server使用写时复制copy-on-write,SQL Server对区extent进行读写,首次对一个区中的数据页进行修改时,SQL Server将区的前影像复制到数据快照。
读取select:无更改过的,读取源库,更改过的,读取快照
由于在首次发生改变时写入了区的前影像,所以SQL Server一方面允许对源库进行更改
另一方面保证对数据库快照的任何查询不会反映创建快照之后发生的任何改变
最初的更改写入区的一个页,而且SQL Server将这个区的前影像写入数据库快照之后,写时复制功能会忽略后续对这个区的任何更改
由于可以为一个源库创建多个数据库快照,所以凡是没有获得区的副本的数据库快照都会被写入区的一个前影像
原理跟Linux LVM的快照原理是一样的!
如有不对的地方,欢迎大家拍砖o(∩_∩)o