Simon Riggs 的开发项目
概述
此页面包含我正在进行或计划在下一个开发周期中进行的多个开发项目的详细信息。
好吧,它曾经是。这是大约在 2010 年最后更新的。
我受多家公司的赞助,因此在中心位置跟踪我的开发兴趣对所有相关人员都有意义。此处列出的所有项目和工作将作为 BSD 许可的代码发布,版权归 PostgreSQL 全球开发组所有。如果您有兴趣赞助我,请访问 http://www.2ndquadrant.com 获取联系方式和其他信息。我目前只得到部分赞助,因此欢迎您的捐助。
在某些情况下,项目可能与他人合作完成,甚至完全移交给他们。在这种情况下,我会添加指向这些项目的链接。
请注意,此处编写的计划并不意味着 PostgreSQL 黑客社区有任何接受程度。每个功能都需要详细的规划,然后才能遵循 PostgreSQL 社区开发流程进行开发。
这是一个开放式 Wiki,因此您可以编辑它,但请不要进行除少量编辑之外的任何操作。随着时间的推移,我将编辑页面,以增强计划或更新开发状态。
活跃开发
可能首先处理这些事情,尽管有些事情会比其他事情花费更长时间
- 截断触发器(已提交)
- COPY 性能(补丁)
- 用于 pg_dump 性能的快照克隆(外部项目)
VLDB 工作
- 分区:段排除
- ReadOnlyTables
- CompressedTables
- 分区,分段表选项
开发计划
- 超大型数据库 (VLDB) - 以太字节级以上的数据存储为中心进行增强,但不限于数据仓库
- 恢复和复制 - 进一步增强鲁棒性
- 企业级性能 - 进一步提高性能和可扩展性
超大型数据库 (VLDB)
VLDB 涵盖了大量主题。此处讨论此主题的另一个页面是 数据仓库。主要关注点是
- 表维护
- VACUUM
- 备份
- 软件升级
- 数据库大小
- 查询性能
- 高级分区
- 仅索引扫描
- 并行化
- 底层扫描性能改进
- 其他问题
- NOT IN
- 数据加载
- 加载性能
- 错误处理
表维护
VACUUM 对于 VLDB 来说显然是一个问题,尤其是当大量数据可能为只读时。备份也可能需要到 WORM 介质或磁带。这里的解决方案是实现只读表,这些表永远不需要 VACUUM。增量备份通过这种方式变得平滑,但我们还需要可迁移的表,这些表可以轻松地从一台服务器移动到另一台服务器。
- 只读表
- 可迁移表
- 块级二进制升级
- 数据库大小减少
- 具有可变长度头的 NUMERIC(~1-3 字节/列)
- NUMERIC 规模缩减(2 字节/列)
- 行可见性开销缩减(8 字节/列)
- 列值压缩
- NULL 位图长度减少
- 涅槃问题:消除对列对齐的需求
目前,我们为所有元组存储 xmin、xmax 和 xvac/combo(3 x 4 字节)。还存储 t_ctid(6 字节)。为了删除和锁定行以进行写入,我们必须具有 xmax。为了更新行,我们必须具有 t_ctid - 如果表阻止 UPDATE,我们可以保存这些字节吗?如果我们有块级 INSERT,我们可以将 xmin/combo 存储在块级而不是元组级。也许这将允许保存 8 字节/行。将它与可见性映射结合起来?删除所有这些将非常复杂;最好看看整个块的压缩。
NULL 位图包括表中每个列的一个位,包括 NOT NULL 列。可能可以减小位图的大小,尽管这意味着将列从 NOT NULL 更改为 NULLable 将不再可能(想法?)。
列值压缩应该是可能的。有点像部分枚举?
查询性能
- statement_cost_limit(由 Csaba Nagy 提出)
- 仅索引扫描(由 Pablo Alcaraz 和 Gunther Schadow 提出)
- 高级分区
- 并行化(对于 8.4 来说不太可能)
- 旁路表(被 TPC-D 以后禁止,因为它们太有用!)
- 底层扫描性能改进
数据加载
数据加载性能需要提高。目前 COPY 是 CPU 密集型的,特别是在将输入数据文件解析为各个列方面。其他问题是
- 没有批处理模式引用完整性
- 需要处理来自 COPY 的数据错误,而不是在第一个错误时中止 - pg_loader 可以做到这一点,因此可能不是优先事项
- 索引的批量更新 - pg_bulkload 是先驱
- 一次一个块的插入
- 减少 COPY 的缓存破坏影响
- 如果可以实现细粒度分区,数据加载可以使用快速模式 COPY
恢复和复制
目前是 PITR 和日志传输复制的维护者。
复制
- 截断触发器,主要用于允许 Slony 复制截断
- 同步复制
- 热备
恢复
- 恢复并行化
需要在热备之后发生,但计划使其易于执行。
- WAL 大小减少
- 从 WAL 记录标头中删除了 4 个字节
- 通过仅记录更改的列来减少来自更新的 WAL
- 涅槃问题:消除对全页写入的需求
- xlogdump
- 已删除的关系缓存
企业级性能
- 性能回归测试
- 基准开发
- TPC-E 线束
- 高级模式知识
- 排序改进
http://archives.postgresql.org/pgsql-hackers/2007-11/msg01101.php
- 可扩展性改进
http://archives.postgresql.org/pgsql-hackers/2007-07/msg00948.php