PostgreSQL使用多版本并发控制MVCC机制:
l 当执行delete时,数据库将删除元组直接标记为dead,并不会真正从物理上删除;
l 当执行update时,数据库将会使用unused空间写入一个新的元组,然后将旧元组标记为dead,也不进行物理删除;
l 当表上频繁DML时,dead tuple会逐渐将空间耗尽,同时做全表扫描时产生很多额外I/O。
GBase 8c采用原位更新技术:
l 将new tuple放在原位,将dead tuple集中存放在undo;
l 去除vacuum,保证数据回收时IO稳定;
l 数据空间缩减。
PG 采用追加更新方式存储数据,也就是当修改数据时,不是在原位置修改,而是写入一个新记录,这会导致空间膨胀,也就需要定期回收过期的数据空间。这一直是 PostgreSQL 的一个弱项。
而GBase 8c实现了 Undo 机制,也就可以在原位置更新数据。这带来的好处包括:
l 高性能:对插入、更新、删除等不同负载的业务,性能以及资源使用表现相对均衡,相比Append Update引擎性能提升10%;
l 运行平稳:性能运行平稳,8小时性能滚降值从13.8%降低至2.5%;
高效存储:支持最大限度的原位更新, TPCC负载下平均节约空间15%~20%,UNDO空间统一分配,集中回收,复用效率更高,存储空间使用更加高效、平稳。