Raouf Chebri:自动扩缩容实战:使用pgbench进行Postgres负载测试

Raouf Chebri:自动扩缩容实战:使用pgbench进行Postgres负载测试

💡 原文英文,约1300词,阅读约需5分钟。
📝

内容提要

本文使用pgbench对Neon的Postgres进行负载测试,以验证自动扩缩容。测试以30个客户端运行高计算开销的阶乘对数查询,规划耗时近2秒。将计算单元范围设为¼至7 CU后运行测试,观察到CPU和内存快速调整。结果平均延迟约6秒,TPS约4.98,表明自动扩缩容能应对负载变化。

🔎

延伸解读

查询规划耗时是主要瓶颈

文章中的查询在¼ vCPU上执行时,规划时间接近2秒,而执行时间仅0.005毫秒。这表明高计算开销的数学函数主要消耗在查询规划阶段,而非执行阶段。因此,当并发客户端增多时,规划开销会迅速累积,成为触发自动扩缩容的关键因素。

自动扩缩容的响应与资源调整

测试将计算单元范围设为¼至7 CU,运行负载后,监控图表显示CPU和内存快速调整。这验证了自动扩缩容能根据负载动态分配资源,无需人工干预。但文章未提供调整的具体时间或资源利用率细节,读者需注意其响应速度可能受工作负载特性影响。

延迟与吞吐量的实际表现

测试结果平均延迟约6秒,TPS约4.98,且延迟标准差较大(2768毫秒),说明操作耗时波动明显。初始连接时间约3.7秒,也增加了整体延迟。这些数据表明,即使自动扩缩容生效,高开销查询仍可能导致较高延迟,不适合对响应时间敏感的场景。

测试配置的注意事项

文章使用pgbench模拟30个客户端,但实际执行命令中客户端数写为8,可能存在笔误。此外,测试仅运行120秒,且未说明是否预热。读者在复现时需注意这些细节,以免影响结果解读。自动扩缩容的效果可能因查询类型和持续时间而异。

❓

Q&A

pgbench是什么?它在Postgres负载测试中有什么作用?

pgbench是Postgres自带的一个基准测试工具,用于评估Postgres服务器的性能。它通过模拟客户端负载并运行测试来测量服务器如何处理并发数据请求。

在Neon中如何启用自动扩缩容?

在Neon中,你可以通过定义希望分配给Postgres实例的最小和最大计算单元(CU)来启用自动扩缩容。例如,1 CU分配1个vCPU和4GB内存。你可以在创建新项目时设置实例大小,或在Neon控制台的Branches页面点击数据库分支并设置CU范围。

用于负载测试的查询是什么?它的执行计划有什么特点?

查询是:SELECT log(factorial(32000)) / log(factorial(20000)); 该查询比较32000和20000的阶乘的对数比率。使用EXPLAIN ANALYZE分析,在¼ vCPU上执行时,规划时间(Planning Time)约为1921.630毫秒,而执行时间(Execution Time)仅为0.005毫秒,表明规划阶段有很高的计算开销。

负载测试的命令是什么?各参数代表什么含义?

命令为:pgbench -f test.sql -c 30 -T 120 -P 1 <CONNECTION_STRING>。其中,-f test.sql指定要执行的查询文件;-c 30指定30个客户端连接;-T 120运行测试120秒;-P 1每1秒报告一次进度。

负载测试的结果如何?平均延迟和TPS是多少?

测试结果:平均延迟(latency average)约为6000.891毫秒,延迟标准差为2768.066毫秒,初始连接时间约为3712.770毫秒,TPS(每秒事务数)约为4.978907(不含初始连接时间)。

自动扩缩容在负载测试中表现如何?

在负载测试中,自动扩缩容能够快速调整CPU和内存分配以应对负载变化。通过监控图表可以观察到资源的快速变化,表明自动扩缩容能有效应对负载压力。

🏷️

标签

➡️

继续阅读