Tho*_*mas 0 postgresql performance windows postgresql-8.3 postgresql-9.3
我们的软件产品目前在 Windows 7 上发布,使用 Postgres 8.3 作为其数据库。在一个繁忙的站点上,可能有 24 个自动化系统每分钟生成 100 行(x100 列),3-10 个人类客户查看大约 1000 行的子集——所有这些都是一次检索,增量更新每分钟左右查询 pk + 时间戳并检索相关的新行。有一些辅助表,但此表具有主要活动。
作为有限的多主系统的第一步(以帮助地理上分离的团队),我们实施了到 9.3 的升级。性能不是第一要务,因此并未真正对其进行分析。随着发布时间的到来,管理层决定暂时放弃 9.3,理由是担心可能会降低性能和缺乏测试资源。我确信性能问题很荒谬,所以我做了一些 PgBench 测试。
使用 9.3 的 pgbench,我交替连接到本地 8.3 和 9.3 安装(不同的端口号)。我已经在这个谷歌驱动器电子表格中捕获了我的结果,但总结是通常 8.3 击败 9.3。9.3 仅在原始插入性能方面获胜。
我们对 postgresql.conf 文件进行了一些自定义,我通常将其保留在 8.3 到 9.3 之间,我将列出非默认设置
max_connections = 1000
shared_buffers = 320MB
temp_buffers = 80MB
max_prepared_transactions = 50 #8.3 only, 9.3 left at 0 (not sure why)
max_fsm_pages = 204800 #8.3 only, 9.3 doesn't have setting
autovacuum_max_workers = 30
Run Code Online (Sandbox Code Playgroud)
那么,这只是进步的代价,还是我应该在 9.3 中做些什么才能让它变得出色?
通常 PostgreSQL 9.3 通常比 8.3 快 - 但很难说有什么问题。可能的来源:IO 问题,错误的 PostgreSQL 配置 - max_connections = 1000 可能是非常错误的值,默认的 work_mem 通常太小,达到硬件限制(9.1 及更高版本应该更好地使用更多 CPU),错误测试......
其他问题可能是 pgBench 中的变化。pgBench 8.3 的结果不应与 pgBench 9.3 的结果完全比较。如果你想要一个好的数字,那么你必须将 pgBench 9.3 用于 PosgreSQL 9.3 和 PostgreSQL 8.3。不要忘记 - 测试应该至少运行大约 20 分钟(更好的时间)。
第二个因素 - 可能 pgBench 对您的生产并不重要。pgBench 是具有争议价值的综合测试。它有利于初始硬件和软件测试,但不利于配置精度和数据库调优。更重要的是您的应用程序的速度 - 您应该测试慢查询或最常见查询的速度。9.3 有很多新功能 - 更好的监控,更舒适的工具,更好地优化某种查询,内置复制,在线舒适的物理备份,更智能的真空(在大型数据集上更快),......
增加 default_statistics_target 会增加查询计划的开销 - 对于非常快速和简单的查询,它可能很重要。另一方面,较高的值降低了错误估计和错误优化的可能性——这对于通常的非平凡查询很重要——规划速度稍慢(在综合测试中可以看到),但在生产中的使用要健壮得多。取决于您的应用程序(如果它使用简单或不简单的查询),此配置变量对您是否重要。
| 归档时间: |
|
| 查看次数: |
1449 次 |
| 最近记录: |