Aws Aurora是什么?Aws Aurora是亚马逊云科技推出的一项兼容MySQL和PostgreSQL的关系数据库服务,其完全托管式和分布式的存储特点不仅在一定程度上保证了数据库运行的低成本性,而且提供了商业数据库的高效益性,可达到MySQL数据库五倍和PostgreSQL数据库三倍的运行速度,所以下文将为大家具体进行Aws Aurora的有关介绍和性能测试。
一、Aws Aurora是什么
Aws Aurora本质是一个关系数据库,采用分布式存储,单个数据库即可跨越AWS三个可用区。此外使用无服务器功能,用户可以根据实际应用需求来运行云数据库资源,并保证了资源扩展的无缝衔接性,具有99.99%的正常运行实际时间保证和1分钟内的数据恢复速度。而且Aws Aurora借助Amazon VPC和密钥加密等私有设置为用户提供高度安全的使用体验。
官网地址:https://www.amazonaws.cn/(点击领取亚马逊云科技免费套餐 )
二、Aws Aurora性能测试 1、环境准备(1)测试端
- 机型:4台db.r4.8xlarge EC2
- vCPU:32
- 内存(GiB):244
- 磁盘:通用SSD 40G
- 网络:高
(2)数据库
- 数据库类型:Aurora mysql5.6 RDS
- DB instance class:db.r4.8xlarge
- vCPU:32
- 内存(GiB):244
- 磁盘:通用SSD
- 网络:高
在四台测试客户端安装sysbench,安装Sysbench Version 0.5,执行以下步骤:
(1)以root用户安装Bazaar/ automake/ Libtool:
yum -y install bzr yum -y install automake yum -y install libtool |
(2)以root用户安装 MySQL 客户端程序 (Red Hat 用mysql‐devel, Debian/Ubuntu 用libmysqlclient‐dev ):
yum -y install mysql-devel yum –y install mysql |
(3)下载Sysbench:
bzr branch lp:sysbench |
(4)编译和安装Sysbench:
cd sysbench ./autogen.sh ./configure make cd sysbench |
在Sysbench客户端执行 以下网络配置,告诉Linux kernel可以用所有的CPU cores 去处理 packets, 默认只可以用两个, 并且减少cores 之间的context switching,这两个设置是为了用更少的Sysbench 客户端达成吞吐目标。
sudo sh -c ‘for x in /sys/class/net/eth0/queues/rx-*; do echo ffffffff > $x/rps_cpus; done’ sudo sh -c “echo 32768 > /proc/sys/net/core/rps_sock_flow_entries” sudo sh -c “echo 4096 > /sys/class/net/eth0/queues/rx-0/rps_flow_cnt” sudo sh -c “echo 4096 > /sys/class/net/eth0/queues/rx-1/rps_flow_cnt” vim /etc/security/limits.conf * soft nofile 65536 * hard nofile 65536 * soft nproc 65536 * hard nproc 65536 |
首先通过sysbench客户端在测试数据库上生成测试表,这里生成250个表,每个表有行数25000条,也可以根据目标,调整表的数目和大小,请替换<>之中的各种连接信息,再执行命令,同时拷贝的时候请注意格式,后面的命令注意事项相同,不再赘述。
./sysbench –test=/home/ec2-user/sysbench/sysbench/tests/db/oltp.lua –mysql-host=<aurora server> –oltp-tables-count=250 –mysql-user=<aurora user> –mysql-password=”<aurora password>” –mysql-port=3306 –oltp-table-size=25000 –mysql-db=<aurora db> –db-driver=mysql prepare |
其输出类似:
参数含义
- –test=tests/db/oltp.lua 表示调用 tests/db/oltp.lua 脚本进行 oltp 模式测试。
- –oltp_tables_count=250表示会生成250个测试表。
- –oltp-table-size=25000表示每个测试表填充数据量为25000。
- –rand-init=on 表示每个测试表都是用随机数据来填充的。
- 加载测试数据时长视数据量而定,若过程比较久需要稍加耐心等待。
生成如下脚本来监控数据库,每秒一次输出QPS/Commit/Rollback/TPS/Threads_con/ Threads_run的信息,以掌握数据库每秒的负载变化。
vi aurora_monitor.sh #!/bin/bash mysqladmin -h -u -p”” extended-status –i1 |awk ‘BEGIN{local_switch=0;print “QPS Commit Rollback TPS Threads_con Threads_run \n——————————————————- “} $2 ~ /Queries$/ {q=$4-lq;lq=$4;} $2 ~ /Com_commit$/ {c=$4-lc;lc=$4;} $2 ~ /Com_rollback$/ {r=$4-lr;lr=$4;} $2 ~ /Threads_connected$/ {tc=$4;} $2 ~ /Threads_running$/ {tr=$4; if(local_switch==0) {local_switch=1; count=0} else { if(count>10) {count=0;print “——————————————————- \nQPS Commit Rollback TPS Threads_con Threads_run \n——————————————————- “;} else{ count+=1; printf “%-6d %-8d %-7d %-8d %-10d %d \n”, q,c,r,c+r,tc,tr; } } }’ |
(1)只读压力测试
在所有sysbench client同时执行命令模拟负载,每次持续5分钟,同时使用监控脚本监视数据库的性能,从console查看CPU,IO,网络等metrics。在这里将通过修改num_threads参数连续测试4*100、4*250、4*500、4*750、4*1000、4*1250和4*1500多种并发连接的场景。
./sysbench –test=/home/ec2-user/sysbench/sysbench/tests/db/oltp.lua –mysql-host=<aurora server> –mysql-user=<aurora user> –mysql-password=”<aurora password>” –mysql-port=3306 –mysql-db=<aurora db> –max-requests=0 –oltp-simple-ranges=0 –oltp-distxinct-ranges=0 –oltp-sum-ranges=0 –oltp-order-ranges=0 –max-time=300 –oltp-read-only=on –num-threads=1000 –report-interval=10 run>>aurora_r.log |
参数说明
- –num-threads=100表示sysbench client发起100个并发连接。
- –oltp-read-only=on表示是只读测试,off表示不要进行只读测试,也就是会采用读写混合模式测试。
- –report-interval=10表示每10秒输出一次测试进度报告。
- –rand-type=uniform 表示随机类型为固定模式,其他几个可选随机模式:uniform(固定)、gaussian(高斯)、special(特定的)、pareto(帕累托),special表示存在热点数据,uniform表示非热点数据模式, 默认是special。
- –mysql-table-engine=xxx:表的存储引擎类型,innodb、myisam这些都可以。
- –max-time=3600表示最大执行时长为3600秒。
- –max-requests=0表示总请求数为0,因为上面已经定义了总执行时长,所以总请求数可以设定为0;也可以只设定总请求数,不设定最大执行时长。
- –percentile=99表示设定采样比例,默认是95%,即丢弃1%的长请求,在剩余的99%里取最大值。
- 即:模拟对10个表并发OLTP测试,每个表1000万行记录,持续压测时间为1小时。
- 针对不同的选项取值就会有不同的子选项。比如oltp-dist-type=special,就有比如oltp-dist-pct=1、oltp-dist-res=50两个子选项,代表有50%的查询落在1%的行(即热点数据)上,另外50%均匀的(sample uniformly)落在另外99%的记录行上。再比如oltp-test-mode=nontrx时,就可以有oltp-nontrx-mode,可选值有select(默认)、 update_key、update_nokey、 insert、 delete,代表非事务式模式下使用的测试sql类型。
1)通过监控脚本可以看到类似结果。
2)可以关注数据库实例的CPU利用率,连接数,IO和网络性能指标。
3)在每个sysbench客户端可以看到类似输出:
- response time avg:平均响应时间。(后面的95%的大小可以通过–percentile=98的方式去更改)
- transactions:精确的说是这一项后面的TPS ,但如果使用了-oltp-skip-trx=on,这项事务数恒为0,需要用total number of events去除以总时间,得到tps。(其实还可以分为读tps和写tps)
- read/write requests: 用它除以总时间,得到吞吐量QPS。
(2)读/写混合压力测试
Aurora在所有sysbench client同时执行命令模拟负载,每次持续5分钟,同时使用监控脚本监视数据库的性能,从console查看CPU,IO,网络等metrics。在这里将通过修改num_threads参数连续测试4*100、4*250、4*500、4*750、4*1000、4*1250和4*1500多种并发连接的场景。
./sysbench –test=/home/ec2-user/sysbench/sysbench/tests/db/oltp.lua –mysql-host=<aurora server> –mysql-user=<aurora user> –mysql-password=”<aurora password>” –mysql-port=3306 –mysql-db=<aurora db> –max-requests=0 –oltp-simple-ranges=0 –oltp-distxinct-ranges=0 –oltp-sum-ranges=0 –oltp-order-ranges=0 –max-time=300 –oltp-read-only=off –num-threads=1000 –oltp-tablesize=25000 –oltp-tables-count=250 –report-interval=10 run>>aurora_w.log |
(3)结果分析
1)只读负载
400并发 | 1000并发 | 2000并发 | 3000并发 | 4000并发 | 5000并发 | 6000并发 | |
QPS aurora | 440K | 680K | 776K | 748K | 726K | 683K | 659K |
CPU aurora | 90 | 96 | 97 | 98 | 98 | 98 | 98 |
Response time aurora | 11.71ms | 19.12ms | 33.10ms | 51.32ms | 72.03ms | 93.36ms | 114.36ms |
2)读/写混合负载
400并发 | 1000并发 | 2000并发 | 3000并发 | 4000并发 | 5000并发 | 6000并发 | |
QPS/TPS aurora | 160K | 188K | 184K | 172K | 152K | 140K | 128K |
CPU aurora | 160K | 188K | 184K | 172K | 152K | 140K | 128K |
Response time aurora | 38.89ms | 81.51ms | 163.37ms | 259.77ms | 391.70ms | 534.18ms | 638.33ms |
通过以上测试数据,可以得出以下结论:
一般来说sysbench测试中,随着并发数增大,目标数据库系统资源被充分利用,QPS/TPS会提高,达到峰值后,资源开始争用,随着并发数继续增大,QPS/TPS反而会下降,从测试来看,当并发数较大时,Aurora的QPS/TPS下降得平稳得多。
一般来说sysbench测试中,随着并发数增大平均响应时间会下降,Aurora的相应时间增大比平缓,这样就意味着高并发时,Aurora可以为客户提供更佳的服务。
8、清除环境./sysbench –test=/home/ec2-user/sysbench/sysbench/tests/db/oltp.lua –mysql-host=<aurora server> –oltp-tables-count=250 –mysql-user=<aurora user> –mysql-password=”<aurora password>” –mysql-port=3306 –oltp-table-size=25000 –mysql-db=<aurora db> –db-driver=mysql cleanup |
推荐阅读:
《Amazon Aurora云数据库主要功能和应用场景介绍》
《AWS RDS是什么 Amazon RDS是什么类型的服务》
(本文由美国主机侦探原创,转载请注明出处“美国主机侦探”和原文地址!)

微信扫码加好友进群
主机优惠码及时掌握

QQ群号:938255063
主机优惠发布与交流