AWS RDS 和 Aurora PostgreSQL Benchmark 性能测试

一、背景

1、目标

在系统上线之前,对整个系统进行压力测试是必要的、周密的做法。整个系统业务处理能力(TPS)是结合了网络、应用架构、数据库等多种因素的一个衡量方式。其中,数据库性能对于整个业务系统处理能力是关键点之一。

为了充分验证数据库能力,建议在云上VPC内另外启动一台高配置的EC2作为负载发生器,并通过sysbench工具运行特定的sql脚本对数据库施压。由此可尽量隔绝应用层和网络层带来的额外影响因素。

2、注意事项

以下事项可能会影响到数据库的性能测试:

  • 施压客户端和数据库的可用区位置,都在同一个AZ性能最高;
  • 数据库是否开启多AZ,单AZ性能更高;
  • 是否配置了足够高的磁盘IO,例如配置为5000 IOPS以上(Aurora无须设定);
  • 是否开启了Performance Insight监控(关闭性能更高);
  • 是否开启了加密(关闭性能更高);
  • 施压客户端的机型配置关系到CPU算力和网络吞吐(推荐大于m5.4xlarge或更高);
  • OS层是否解除了包括连结数、打开文件数等内核限制(推荐提升sysctl.conf参数)。

此外,数据库自身参数的配置可通过参数组进行调整,参数组的差异也将影响数据库的性能。

二、环境安装

1、EC2压力测试机准备

部署一台EC2,使用Amazon Linux 2操作系统,并建议配置不低于m5.4xlarge规格,然后安装对应软件:

amazon-linux-extras install epel postgresql10 -y
yum update -y
yum install sysbench -y
echo "kernel.pid_max = 65535" >> /etc/sysctl.conf
echo "" > /etc/security/limits.d/20-nproc.conf

注:以上步骤安装postgresql10主要是使用命令行下的psql客户端软件包,方便后续调试,并不是在压力测试机上启动完整数据库。

编辑/etc/security/limits.conf文件,加入如下几行:

* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536

编辑/etc/security/limits.d/20-nproc.conf文件,加入如下几行:

* soft nofile 65536
* hard nofile 65536

最后执行reboot命令重启EC2,让以上所有生效。

2、数据库准备

创建Aurora PostgreSQL数据库,机型选择为r6g.2xlarge的数据库。创建RDS PostgreSQL数据库,本文使用的版本是11.16,在新加坡区域截止实验时候只支持r5.2xlarge规格,尚未推出r6g.2xlarge机型。创建时候设定好数据库、用户名、密码。

为了提升性能,按照上述的可用区等推荐事项进行优化。

三、RDS性能测试

1、准备数据

注意:准备数据可以按照table=20准备,实际测试时候可以只用10张表,也可以用20张表。

sysbench --db-driver=pgsql --pgsql-host=database-1.cvwawwygiwfi.ap-southeast-1.rds.amazonaws.com --pgsql-port=5432 --pgsql-user=lxy --pgsql-password=1qazxsw2 --pgsql-db=lxy --table_size=100000 --tables=20 oltp_read_write prepare

2、写入测试

其中并发参数--threads=100分别从100、1000、2000进行测试。

sysbench --db-driver=pgsql --pgsql-host=database-1.cvwawwygiwfi.ap-southeast-1.rds.amazonaws.com --pgsql-port=5432 --pgsql-user=lxy --pgsql-password=1qazxsw2 --pgsql-db=lxy --table_size=100000 --tables=10 --events=0 --time=60 --threads=100 --percentile=95 --report-interval=10 oltp_write_only run

3、读取测试

其中并发参数--threads=100分别从100、1000、2000进行测试。

sysbench --db-driver=pgsql --pgsql-host=database-1.cvwawwygiwfi.ap-southeast-1.rds.amazonaws.com --pgsql-port=5432 --pgsql-user=lxy --pgsql-password=1qazxsw2 --pgsql-db=lxy --table_size=100000 --tables=10 --events=0 --time=60 --threads=100 --percentile=95 --report-interval=10 oltp_read_only run

4、读写混合测试

其中并发参数--threads=100分别从100、1000、2000进行测试。

sysbench --db-driver=pgsql --pgsql-host=database-1.cvwawwygiwfi.ap-southeast-1.rds.amazonaws.com --pgsql-port=5432 --pgsql-user=lxy --pgsql-password=1qazxsw2 --pgsql-db=lxy --table_size=100000 --tables=10 --events=0 --time=60 --threads=100 --percentile=95 --report-interval=10 oltp_read_write run

四、Aurora性能测试

1、准备数据

注意:准备数据可以按照table=20准备,实际测试时候可以只用10张表,也可以用20张表。

替换上一步的其中的RDS节点Endpoint为Aurora cluster的主节点(不是带ro字样的,带ro的是只读节点) 

sysbench --db-driver=pgsql --pgsql-host=lxy.cluster-cvwawwygiwfi.ap-southeast-1.rds.amazonaws.com --pgsql-port=5432 --pgsql-user=lxy --pgsql-password=1qazxsw2 --pgsql-db=postgres --table_size=100000 --tables=20 oltp_read_write prepare

2、写入测试

其中并发参数--threads=100分别从100、1000、2000进行测试。

sysbench --db-driver=pgsql --pgsql-host=lxy.cluster-cvwawwygiwfi.ap-southeast-1.rds.amazonaws.com --pgsql-port=5432 --pgsql-user=lxy --pgsql-password=1qazxsw2 --pgsql-db=postgres --table_size=100000 --tables=10 --events=0 --time=60 --threads=1000 --percentile=95 --report-interval=10 oltp_write_only run

3、读取测试

其中并发参数--threads=100分别从100、1000、2000进行测试。

sysbench --db-driver=pgsql --pgsql-host=lxy.cluster-cvwawwygiwfi.ap-southeast-1.rds.amazonaws.com --pgsql-port=5432 --pgsql-user=lxy --pgsql-password=1qazxsw2 --pgsql-db=postgres --table_size=100000 --tables=10 --events=0 --time=60 --threads=1000 --percentile=95 --report-interval=10 oltp_read_only run

4、读写混合测试

其中并发参数--threads=100分别从100、1000、2000进行测试。

 sysbench --db-driver=pgsql --pgsql-host=lxy.cluster-cvwawwygiwfi.ap-southeast-1.rds.amazonaws.com --pgsql-port=5432 --pgsql-user=lxy --pgsql-password=1qazxsw2 --pgsql-db=postgres --table_size=100000 --tables=10 --events=0 --time=60 --threads=1000 --percentile=95 --report-interval=10 oltp_read_write run

五、测试结果

在以上环境中,分别施压并发参数--threads=100分别从100、1000、2000进行测试,并记录结果用于对比并获得结论。

至此实验完成。