postgreSQL 的mvcc怎么实现cache,fusion,维护一个page的所有权表吗?
PostgreSQL的MVCC机制是通过维护一个page的所有权表来实现的。当一个事务开始时,它会创建一个新的page,并将该页面的所有行标记为“未锁定”。然后,事务会读取或写入这些行,并将它们标记为“已锁定”。如果另一个事务尝试在同一个时间访问相同的行,则第一个事务将阻止第二个事务访问这些行,直到第一个事务完成为止。这样可以确保每个事务只能看到其自己的版本,从而避免了数据不一致的问题 。
MVCC还使用缓存和融合来提高性能。当一个事务读取一行数据时,它会从缓存中查找该行。如果缓存中没有该行,则会从磁盘中读取该行并将其添加到缓存中。如果多个事务同时访问同一行数据,则可能会发生冲突。为了解决这个问题,MVCC使用合并来将多个版本的行合并为一个版本,并将所有其他版本删除。这样可以减少对磁盘的访问次数,并提高性能 .