我的团队正在考虑从 9.1 切换到 9.4,作为部分评估,我们希望衡量 INSERT INTO TABLE ...
的改进程度,其中有 3- 4
列固定长度类型,例如 INT
、DOUBLE PRECISION
。我们使用的是非批处理的 INSERT,并且表是已记录的且不是临时的。 fsync
设置为on
。
Q0:是否有任何理由认为在这个特定语句上 9.4
会比 9.1
更快?
例如基于改进的 WAL 性能:
https://momjian.us/main/writings/pgsql/features.pdf
显然,最好的答案是去检查我们的数据并进行实验,但让我们进行一些猜测。
问题1:您是否了解绩效评估?
Q2:INSERT
中的多少内容被 WAL
占用?
服务器上的设置(从 9.1
配置文件逐字复制)
#fsync = off
#synchronous_commit = on
#wal_sync_method = fsync
#full_page_writes = on
#wal_buffers = -1
#wal_writer_delay = 200ms
shared_buffers = 15GB
temp_buffers = 1024MB
work_mem = 1024MB
最佳答案
您提供的链接基于 Section E.2.3.1.2. General Performance 中找到的信息- 顺便说一句,这是一本很棒的读物。根据您建议的测试,我预计不会有任何实际的性能差异,因为您不会利用并行或部分写入(关于 wal 文件)。也就是说,您将来可能会遇到这种情况。此外,9.4(嗯,实际上是 9.1 之后)提供了许多有用的工具和性能增强,在我看来,这些都证明了从 9.1 切换到 9.4 的合理性。例如,从 9.2 开始,JSON 成为一种数据类型,可以进行仅索引扫描,并且内存排序已改进多达 25%。 9.3 引入了物化 View (9.4 中具有并发刷新)和可更新的“简单” View (定义在 9.4 中略有扩展)。在 9.4 中,增强了聚合并定义了 ALTER SYSTEM(使用 SQL 命令更改配置设置的能力(进入最后读取的 postgresql.auto.config,确保它覆盖 postgresql.config 值))。
值得注意的是,默认日志记录也发生了变化。例如,在创建表时,您不会收到有关隐式索引和序列创建的消息(将日志级别设置为 DEBUG1 来修复 - 当我从 9.1 切换到 9.3 时,尤其是在讲座期间,这让我发疯)。
关于问题 1,我会运行 TPC基准测试(C 和 VMS 是唯一不免费的)。对于问题 2,这实际上取决于您的 wal 设置,但从我从您的配置文件中看到的情况来看,它与版本性能无关。我还会在您的系统上运行 pgtune(下面的链接),以确保您的配置文件在测试之前尽可能优化。
与其他评论者一样,只需构建它并看看会发生什么。与直接插入相比,您可能不会得到太多(如果有的话)差异,因此我会尝试大型、多表连接、大量排序和大量事务模拟(例如,大量插入、更新和删除 - 只需使用 plpgsql简单性)- TCP 查询也能很好地进行性能测试。
链接:
要查找“新增功能”PostgreSQL wiki 页面,请将版本号添加到以下 URL 的末尾。 .
您可以在 pgtune.leopard.in.ua 找到 pgtune 的 GUI 版本; pgfoundry 的独立下载时好时坏,因为它似乎总是出现故障。
关于postgresql - 插入表 Postgres 9.4 与 9.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29794652/