我发现很多线上和印刷指南都可以指导如何优化Postgres以适用于OLTP应用程序,但我没有发现任何特定于数据仓库应用程序的类似内容。由于工作负载类型存在很多差异,因此我相信在数据库管理和调优方面必须存在一些差异。
我自己的一些经验是:
- 从DDL方面来说,我更加自由地使用索引,因为我通常只需要担心一天内的插入,并且可以进行批量插入并重建索引。 - 我通常使用整数代理键来连接具有多个自然键的数据,以加快连接速度。 - 我通常会定义和维护非常全面的日期表,该表具有预构建的日期操作(财政日期与日历日期不同,财政年月、星期的起始日等),在选择语句和where语句中广泛使用它而不是使用函数。这通常有助于处理CPU密集型聚合查询。
我希望能找到关于内存管理和其他数据库设置的信息,但如果您了解Postgres基于数据仓库的任何有用最佳实践,我会很高兴听取您的意见。
我自己的一些经验是:
- 从DDL方面来说,我更加自由地使用索引,因为我通常只需要担心一天内的插入,并且可以进行批量插入并重建索引。 - 我通常使用整数代理键来连接具有多个自然键的数据,以加快连接速度。 - 我通常会定义和维护非常全面的日期表,该表具有预构建的日期操作(财政日期与日历日期不同,财政年月、星期的起始日等),在选择语句和where语句中广泛使用它而不是使用函数。这通常有助于处理CPU密集型聚合查询。
我希望能找到关于内存管理和其他数据库设置的信息,但如果您了解Postgres基于数据仓库的任何有用最佳实践,我会很高兴听取您的意见。
bigint
更改为smallint
时,我们获得了巨大的性能变化。 - Tomas Greif