EDB (EnterpriseDB)公司,正在为Postgresql数据库开发全新的存储引擎。zheap(一种新的 PostgreSQL 存储格式)。这种新的存储格式可以更好地控制膨胀,减少元组大小并减少写入放大。
我如何使用 zheap?
我们提供了一个存储引擎选项,您可以在创建表时设置该选项。例如:
创建表 t_zheap(c1 int, c2 varchar) 使用 zheap;
zheap 表的索引创建不需要任何特殊语法。
您还可以设置 GUC 参数 default_table_access_method。默认值为“heap”,但您可以将其设置为“zheap”。如果这样做,所有后续创建的表都将使用 zheap。
一旦将存储格式 API 工作集成到 PostgreSQL 中,这些接口可能会发生变化。我们将调整此代码以使用 PostgreSQL 社区同意的任何接口。
每个 zheap 页面都有一组固定的交易槽,每个槽都包含交易信息(交易 ID 和纪元)和该交易的最新撤消记录指针。默认情况下,我们每页有四个事务槽,但这可以通过在配置 zheap 时设置 --with-trans_slots_per_zheap_page=value 来更改。
什么还不行?
逻辑解码
快照太旧 - 我们可能希望在提交第一个版本后实现这一点,因为这对于 zheap 的工作方式有所不同。
Alter Table <table_name> Set Tablesapce <tbs_name> - 为了使这个功能在 zheap 中正常工作,在复制页面时,我们需要确保在复制页面之前应用挂起的中止。
工具
pg_undo_dump 类似于 pg_wal_dump:我们想开发这个实用程序,因为它可以用来查看撤销记录的内容,并且可以帮助我们调试与撤销链相关的问题。
我们还希望开发诸如 pgstattuple、pgrowlocks 之类的工具,使我们能够在低级别检查数据库页面的内容。
wal 一致性检查器:这将用于检查 WAL 重做例程中的错误。目前,它与我们在当前堆中的非常相似,但我们希望扩展它以检查撤消页的一致性,类似于检查数据和索引页的方式。
开放式问题
目前,即使 TPD 页面可以完全重用,它们也不会添加到 FSM。
单用户模式:这需要调查到底需要什么。我认为我们需要确保在不需要调用 undo worker 的情况下应用撤消。