文章目录
- 每日一句正能量
- 1. 背景与问题
- 2. 环境与数据
- 3. 复现过程
- 4. 方案实施
- 5. 结果对比
- 6. 风险与复盘
每日一句正能量
“向上的路,从来都不拥挤。”
通往卓越、成长的道路竞争者很少。这条路之所以“不拥挤”,是因为大多数人在山脚下徘徊,或被捷径吸引,或在中途平台停下。真正的竞争壁垒,是“愿意并能够长期向上”的信念与耐力。
1. 背景与问题
数据库容量评估和性能优化通常依赖基准测试。然而在实际项目中,很多压测结果因同时修改多个变量、数据量不足、缓存未清理、SQL版本不一致等因素而失真,最终导致错误决策。例如某业务在调整work_mem的同时更换了索引和磁盘配置,TPS 提升 30%,但无法判断真正的收益来自哪里。
本文以 PostgreSQL 为例,总结如何通过变量控制、统一数据模板和规范化压测流程,避免得到错误结论。
2. 环境与数据
环境:
- PostgreSQL 16
- 32 Core CPU / 128GB RAM
- NVMe SSD
- 数据规模:1 亿订单记录
- 工具:pgbench、pg_stat_statements、iostat
SQL:
SELECTuser_id,SUM(amount)FROMordersWHEREcreate_time>=CURRENT_DATE-30GROUPBYuser_id;初始参数:
shared_buffers=32GB work_mem=16MB effective_cache_size=96GB执行计划:
HashAggregate Seq Scan on orders Execution Time: 5.86 s3. 复现过程
错误压测:
- 同时修改索引、work_mem、shared_buffers。
- 数据量仅100万行。
- 未预热缓存。
正确压测:
- 固定硬件和数据库版本。
- 使用相同数据模板。
- 每次仅调整一个参数。
- 每轮压测执行3~5次,取中位数。
- 保留执行计划和监控数据。
4. 方案实施
示例仅调整:
work_mem=64MB保持SQL、索引、硬件和数据一致。
优化后执行计划:
HashAggregate Memory Usage: 28MB Execution Time: 3.74 s重点采集:
- TPS
- P95/P99
- CPU
- IO
- Buffer Hit
- EXPLAIN (ANALYZE,BUFFERS)
5. 结果对比
| 指标 | 错误压测 | 规范压测 |
|---|---|---|
| 变量数量 | 4 | 1 |
| TPS波动 | ±22% | ±3% |
| 执行时间 | 无法归因 | 5.86s→3.74s |
| 结论可信度 | 低 | 高 |
规范测试能够准确评估参数影响,为容量规划提供可靠依据。
6. 风险与复盘
风险:
- 多变量同时修改导致无法归因。
- 数据规模过小无法反映真实生产特征。
- 未记录执行计划和监控数据,无法复现结论。
复盘建议:
- 固定环境、数据模板和SQL版本。
- 每次只调整一个变量。
- 保存执行计划、参数、监控指标和压测脚本。
- 对比TPS、延迟、CPU、IO和等待事件,形成完整证据链。
通过建立规范化基准测试流程,可有效避免错误结论,提高容量评估和性能调优的准确性。
转载自:https://blog.csdn.net/u014727709/article/details/164124810
欢迎 👍点赞✍评论⭐收藏,欢迎指正