关键字:
KingbaseES、MVCC、数据快照、快照过期、人大金仓
1、数据快照
1.1 什么是数据快照
简单的说,数据快照就是MVCC中的数据版本。
每一个更新数据的事务启动时,在DB中的数据都有与之对应的状态记录拷贝(事务的操作也是针对这个记录,而不是针对原始数据),以便确定数据拷贝对该事务是否可见,从而实现事务间的数据隔离;
2、快照过期
2.1 数据快照的缺陷
当一个数据版本被一个长事务占用时,将导致相关存储资源和内存资源无法回收。此种情况在数据库server大量发生的话,将会导致数据库内数据严重膨胀,进而影响数据库的性能和稳定性。
数据膨胀产生的简化逻辑流程见下图:
2.2 快照过期业务逻辑
为解决数据膨胀的问题,引入了一个新的特性:snapshot too old(快照过旧),在数据库server增加了一个参数old_snapshot_threshold。通过这个参数,数据库server可以为数据快照设定一个过期时间,对于过期的数据快照,数据库server可以直接清理,此时占用此数据快照的长事务结束并报错提示:snapshot too old。
增加快照过旧特性的数据版本管理流程简化逻辑,见下图