在这篇博文中,我们将演示如何使用AWS CloudF和 Python 为Amazon Aurora PostgreSQL 兼容版数据库生成性能测试框架。此性能测试模型可以帮助您在 Aurora PostgreSQL 上运行多次负载测试迭代,并针对数据库版本、配置和实例类型做出数据驱动的决策。
本博文使用 AWS CloudFormation和 aws-samples GitHub 存储库以构建解决方案资源,使用推荐的最佳实践部署 Amazon Aurora PostgreSQL 数据库集群一文中的 CloudFormation 模板。
解决方案概述
此性能测试框架提供以下资源:
- 用于创建Amazon Virtual Private Cloud (Amazon VPC) 资源、Amazon Elastic Compute Cloud (Amazon EC2) 实例和 Aurora PostgreSQL 数据库的CloudFormation 模板
- 在测试数据库中创建数据库对象的 Python 脚本
- 您可以导入并在任何服务器上运行的预配置 Apache JMeter 测试计划
您可能需要根据个别用例重新调整和优化此测试框架。
Amazon Aurora是一种关系数据库服务,它结合了高端商业数据库的速度和可用性以及开源数据库的简单性和成本效益。Aurora 与 MySQL 和 PostgreSQL 完全兼容,无需修改即可运行现有应用程序和工具。
Apache JMeter是一款应用广泛的开源负载测试工具,支持各种应用的负载测试,可以模拟服务器、数据库、网络、Web应用的重负载。您可以创建虚拟用户并添加可以模拟实时生产负载的“思考时间”。有关更多详细信息,请参阅Apache JMeter。
下图说明了我们的解决方案架构。

先决条件
确保您具有以下先决条件:
- 有权创建 CloudFormation 堆栈和创建 Amazon VPC 资源、EC2 实例和 Aurora 数据库的 AWS 账户
- 使用 AWS CloudFormation 使用推荐的最佳实践部署 Amazon Aurora PostgreSQL 数据库集群一文中提到的先决条件
- 请考虑某些资源在使用过程中产生的成本。
设置 Amazon VPC 和网络组件
有关设置 Amazon VPC 和网络组件的完整说明,请参阅使用 AWS CloudFormation 使用推荐的最佳实践部署 Amazon Aurora PostgreSQL 数据库集群。请注意,不需要构建 Unix 堡垒主机。
选择Launch Stack以使用 AWS CloudFormation 构建 Amazon VPC 和网络组件:
输入以下参数值:
- 堆栈名称- 为堆栈输入一个有意义的名称
- ClassB 2 nd Octet – 指定IPV4 CIDR 块的第 2个八位字节
创建堆栈的估计时间为 5 分钟。
构建 Amazon EC2 Windows 机器
选择Launch Stack以使用 AWS 构建您的 Amazon EC2 Windows 机器:
输入以下参数值:
- 堆栈名称- 为堆栈输入一个有意义的名称
- InstanceType – t3.2xlarge(默认)
- KeyName – Windows Amazon EC2 的密钥对
- ParentVPCStack – 用于从上一步构建 Amazon VPC 组件的堆栈名称
- SourceCidrForRDP – 使用 RDP 登录 Amazon EC2 的客户 IP
创建堆栈的估计时间为 5 分钟。
CloudFormation 堆栈创建一个 Windows EC2 机器,您稍后将使用它来安装 JMeter 并启动 JMeter 负载测试。在 Amazon EC2 控制台上,您应该会看到一个名为 JmeterApp 的 EC2 实例处于运行状态。

设置 Aurora PostgreSQL 数据库
选择Launch Stack以创建 Aurora 数据库基础架构:
有关完整说明,请参阅使用 AWS CloudFormation 使用推荐的最佳实践部署 Amazon Aurora PostgreSQL 数据库集群。
创建堆栈的估计时间为 10 分钟。
由于链接帖子中的 Unix 堡垒主机不是必需的ParentSShBastionStack,因此请输入用于在上一节中构建 Windows Amazon EC2 实例的堆栈名称。
成功创建数据库后,登录AWS Secrets Manager控制台并记下数据库用户名、密码、端口和主机名。
设置 Apache JMeter
登录Amazon EC2 Windows 机器并执行以下步骤来配置 JMeter:
- 在 Amazon EC2 机器上下载并安装最新的Java 。
- 下载并安装Apache JMeter。
- 下载Apache JMeter Plugins Manager并将其放在
%JMETER_HOME%/lib/ext.
JMeter Plugins Manager 管理执行此负载测试所需的插件。有关更多详细信息,请参阅JMeter 插件管理器。
- 将 Apache JMeter 的堆大小增加到 4G:
# cd <JMeter Installation Directory>/bin
编辑`jmeter.bat`和更新以下内容:
set HEAP=-Xms4g -Xmx4g -XX:MaxMetaspaceSize=256m
- 在 EC2 机器中下载PostgreSQL JDBC 连接 JAR 文件。
- 在 EC2 机器上安装Python (3.xx 或更高版本)。
- 安装 pip 和 psycopg2:
# python -m pip install psycopg2
- 将 DBeaver社区版客户端下载到 EC2 机器上。
- 使用从AWS Secrets Manager检索到的数据库连接详细信息并使用 DBeaver 验证数据库连接。
# SELECT NOW(),current_database();
now |current_database|
-----------------------------+----------------+
2022-09-28 10:42:40.473 -0400|postgres |
- 下载附加的 Apache JMeter JMX 文件 ( TestPlan_Jmeter_insert_update.jmx ) 以执行负载测试并将其放在
<testdata_directory>EC2 机器中的任何目录下。
准备测试数据
要准备测试数据,请使用从AWS Secrets Manager检索到的数据库凭证在测试数据库上运行 Python 脚本 ( python_create_testdata.py )。
打开命令提示符,然后运行以下命令:
# python python_create_testdata.py <dbuser> <dbpassword> <testdb> <clusterhostname>
此脚本创建模式、表、分区、索引和函数,为负载测试做准备。您可以多次运行该脚本,它将删除现有的数据库对象并重新创建数据库对象以进行性能测试。
Apache JMeter 测试计划说明
本文中使用的 Apache JMeter 测试计划具有三个线程组:
- 150kb_update_insert – 此线程组执行 150 KB 有效负载插入和更新到测试表。它具有以下参数:
- 用户数量– 2
- 加速期– 300 秒
- 循环计数- 288000
- 吞吐量控制器- 90% 插入,10% 更新
- 2MB_Insert – 此线程组对测试表执行 2 MB 插入。它具有以下参数:
- 用户数量– 1
- 加速期– 1 秒
- 循环计数- 8
- 吞吐量控制器- 100% 插入
- 75MB 有效负载插入– 此线程组对 Python 脚本创建的表执行插入操作。它具有以下参数:
- 用户数量– 1
- 加速期– 1 秒
- 循环计数- 2
- 吞吐量控制器- 100% 插入
为了更好地了解不同的 JMeter 组件,请参阅 JMeter 文档关于构建数据库测试计划。
性能测试运行
要运行性能测试,请完成以下步骤:
- 在 Amazon EC2 Windows 机器中,通过选择以 GUI 模式启动 Apache JMeter
%JMETER_HOME%/bin/jmeter.bat - 选择 Apache JMeter 可执行文件以打开控制台。
- 选择File,Open,然后选择
TestPlan_Jmeter_insert_update.jmx - 从 Amazon EC2 机器中选择
Testplan_to_insert_Update并选择 PostgreSQL 驱动程序。
- 选择Database and JMeter Configuration并使用集群主机、数据库名称、用户名和密码更新 Aurora PostgreSQL 数据库详细信息。

- 右键单击线程组并确认所有线程组都已启用。
- 展开每个线程组并右键单击并禁用侦听器。

- 完成上述所有步骤后,关闭 JMeter GUI 屏幕以在 cli 模式下运行负载测试。
- 打开命令提示符,然后在 cli 模式下运行负载测试:
# %JMETER_HOME%/bin/jmeter.bat -n
-t "<testdata_directory>/TestPlan_Jmeter_insert_update.jmx" -l "<output directory>/”<output_filename>.jtl"
性能测试结果
您可以通过从 Apache JMeter GUI 打开输出文件 ( ) 查看 Apache JMeter 上的结果,如以下屏幕截图所示。<output directory>/<output_filename>.jtl

您还可以使用以下命令生成仪表板报告:
# %JMETER_HOME%/bin/jmeter.bat -g "<output directory>/output_filename.jtl"
-o <reportDirectory>
此报告以 HTML 格式生成,可以通过选择以下文件来查看,<reportDirectory>/index.html.
仪表板报告提供以下负载测试指标:
- 运行的开始时间和结束时间
- APDEX(应用程序性能指数)
- 显示所有失败和成功请求的请求摘要图
- 提供有关响应时间、吞吐量和网络速度的信息的统计表
- 提供运行期间遇到的错误类型的错误摘要表


除了所有这些指标之外,此仪表板还深入了解其他重要图表:
- 随着时间的推移
- 吞吐量
- 响应时间
下图通过显示不同线程组的平均响应时间(以毫秒为单位)来描述“随着时间的推移”。

下图通过显示不同线程组随时间变化的每秒点击数来描绘“吞吐量”图表。

下图通过显示不同线程组随时间变化的响应时间百分位来描绘“响应时间”图表。

有关 JMeter 仪表板和图表的更多详细信息,请参阅生成报告仪表板。
此外,您可以使用Amazon CloudWatch指标和Amazon RDS Performance Insights查看操作系统和数据库性能。
下图显示了测试运行期间的操作系统指标、数据库负载和运行次数最多的 SQL,如Amazon RDS Performance Insights所示。

运行多次迭代
要为不同的数据库配置重新运行测试,请完成以下步骤:
- 在 AWS CloudFormation 控制台上,使用配置更改(数据库实例、数据库版本)更新堆栈并更新堆栈。
- 从 Secrets Manager 中检索数据库详细信息和凭证。
- 再次运行 Python 脚本以重新加载数据。
- 使用数据库凭据和集群信息更新 Apache JMeter,然后重新运行测试。
清理
为避免不必要的费用,请在使用完此解决方案后删除通过 CloudFormation 堆栈创建的资源。要彻底删除,请通过 AWS CloudFormation 控制台按以下顺序删除 CloudFormation 堆栈:
- 删除数据库的堆栈。
- 删除 Amazon EC2 JMeter 的堆栈。
- 删除 VPC 的堆栈。
结论
在这篇博文中,我们提供了一个基于 AWS CloudFormation、Python 脚本和 Apache JMeter 构建的测试框架,您可以使用它来运行性能测试。该框架可以提供有关如何进行性能测试以及如何轻松创建测试数据的见解,并且您可以评估任何选择的数据库配置的结果。
原文标题:Configure a performance testing framework for Amazon Aurora PostgreSQL
原文作者:Ishwar Adhikary, Bharath Kumar, Jagrit Shrestha, and John Lonappan
原文地址:https://aws.amazon.com/cn/blogs/database/configure-a-performance-testing-framework-for-amazon-aurora-postgresql/






