【发布时间】:2021-07-23 00:32:20
【问题描述】:
我们将生产从旧基础架构迁移到新基础架构(使用新网络/服务器/dc...)。
新硬件/存储应该至少相同或更好(因为它是新的,与 5 年或更早的旧硬件相比,没有质量降级)。
什么是相等的:
- postgres 版本:9.6.21
- postgres 参数
- 内存:> 180GB
- 大页面:相同
- 透明大页面:无
有什么不同:
- 操作系统版本(之前:rhel6,之后:rhel7)
- 存储(之前:光纤通道,之后:iscsi)
- 架构(之前:1 个主站 + 1 个异步从站,之后:1 个主站 + 1 个同步从站 + 1 个异步从站)
- CPU:缓存相同但周期不同(之前:3199MHz,之后:3600MHz)
我们注意到查询速度有点慢。 我们开始在本地进行基准测试以排除网络层,并且仍然观察到之前和之后的差异。 我们测试了一个简单的
\timing on
explain analyze select version();
在这方面,令人惊讶的是,我们也存在差异。 之前:
- 平均规划时间:0.005ms
- 平均执行时间:0.006ms
- 时间平均:0.090ms
之后:
- 平均规划时间:0.016ms
- 平均执行时间:0.018ms
- 平均时间:0.255ms
我还仅使用本地磁盘进行了测试,以排除存储/iscsi/fc 层,并且仍然如此。 此外,我每次都在 async slave 上进行测试(bench 查询只是 SELECT)。
这怎么解释?我们可以利用哪些杠杆来至少在本地检索以前的表现?
我正在考虑在 RHEL7 上对 PG 进行潜在的特定调整,或者与内存相关的东西?
【问题讨论】:
-
您的查询并未真正衡量查询性能。它衡量您可以多快地计划一个返回常量的函数。它不访问任何数据。您遗漏了有关 CPU 的任何细节。这是内部部署还是云计算?
-
您是否
ANALYZE新安装的数据库以更新统计表? -
实际上,我们开始对数据进行基准访问,要么通过索引,要么强制全扫描,只有当我们注意到差异时,我们才尝试了这个选择版本(),我认为它应该只在内存中。真空数据库已经完成。不是云,本地测试。
标签: postgresql performance timing sql-execution-plan postgresql-9.6