本文档介绍以Sysbench工具测试PolarDB MySQL版集群OLTP负载性能,您可以按照本文介绍自行测试对比,快速了解数据库系统的性能。
测试工具
Sysbench是一个跨平台且支持多线程的模块化基准测试工具,用于评估系统在运行高负载的数据库时相关核心参数的性能表现。使用Sysbench是为了绕过复杂的数据库基准设置,甚至在没有安装数据库的前提下,快速了解数据库系统的性能。
测试环境
- 测试的ECS和PolarDB MySQL版均在同一地域、同一可用区。
- 网络类型均为VPC网络。 说明 ECS实例和PolarDB MySQL版集群需保证在同一个VPC中。
- 测试用PolarDB MySQL版集群如下:
- 只读、只写以及读写性能测试使用的是两节点集群(一主一只读),多个只读节点性能将依次使用一主一只读到一主八只读的集群进行测试。
- 使用的连接串为集群地址,如何查看PolarDB MySQL版集群地址请参见申请集群地址和主地址。
- 为了充分利用数据库集群资源,性能白皮书测试数据是在已升级的数据库代理规格上进行测试,数据库代理规格均升级到标准配置*4。具体升级说明请参见升级数据库代理的规格。
- 测试用ECS实例信息如下:
- 实例规格为ecs.c5.4xlarge。
- 实例所使用的镜像为CentOS 7.0 64位。
- 测试用ECS实例的数量,根据集群规格来定,8核规格使用1个ECS实例,16核规格使用2个ECS实例,以此类推。
测试场景
- 对不同独享规格的一主一只读节点集群的只读、只写、读写性能以及一主多只读节点集群的只读性能进行OLTP性能测试。
- 对不同通用规格的一主一只读节点集群的只读、只写、读写性能进行OLTP性能测试。
衡量指标
- TPS(Transactions Per Second):即数据库每秒执行的事务数,以COMMIT成功次数为准。
- QPS(Queries Per Second):即数据库每秒执行的SQL数(含INSERT、SELECT、UPDATE、DELETE等)。
安装Sysbench
重要 本文档中的命令只能由root权限的用户来执行。
- 在ECS中执行如下命令安装Sysbench。
yum install gcc gcc-c++ autoconf automake make libtool bzr mysql-devel git mysql git clone https://github.com/akopytov/sysbench.git ##从Git中下载Sysbench cd sysbench ##打开Sysbench目录 git checkout 1.0.18 ##切换到Sysbench 1.0.18版本 ./autogen.sh ##运行autogen.sh ./configure --prefix=/usr --mandir=/usr/share/man make ##编译 make install
- 执行如下命令配置Sysbench client,使内核可以利用所有的CPU核数处理数据包(默认设置为2核),同时减少CPU核数之间的上下文切换。
sudo sh -c 'for x in /sys/class/net/eth0/queues/rx-*; do echo ffffffff>$x/rps_cpus; done'
说明ffffffff
表示使用32个核。请根据实际配置修改,例如ECS为8核,则输入ff
。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"
测试方法
说明 以下测试方法中以PolarDB MySQL版集群版为例进行说明。
- 获取PolarDB MySQL版集群地址和端口。具体操作请参见申请集群地址和主地址。
- 将PolarDB MySQL版集群地址的主库是否接受读设置为是,具体操作请参见配置数据库代理。
- 在ECS上执行如下命令,以在PolarDB MySQL版集群中创建数据库
testdb
为例。mysql -h XXX -P XXX -u XXX -p XXX -e 'create database testdb'
说明 请将本命令和后续步骤命令中的XXX
替换为PolarDB MySQL版集群的集群地址、端口号、用户名和密码,具体参数说明如下。参数 说明 -h
PolarDB MySQL版集群的集群地址。 -P
PolarDB MySQL版集群的端口号。 -u
PolarDB MySQL版集群的用户名。 -p
上述用户名对应的密码。 - 使用Sysbench测试PolarDB MySQL版集群版一主一只读节点的只读性能,整个过程将持续10分钟。
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 oltp_read_only prepare ##准备数据 sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 --threads=XXX --percentile=95 --range_selects=0 --skip-trx=1 --report-interval=1 oltp_read_only run ##运行workload sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 --threads=XXX --percentile=95 --range_selects=0 oltp_read_only cleanup ##清理
- 使用Sysbench测试PolarDB MySQL版集群版一主一只读节点的写入性能,整个过程将持续10分钟。
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 oltp_write_only prepare ##准备数据 sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 --threads=XXX --percentile=95 --report-interval=1 oltp_write_only run ##运行workload sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 --threads=XXX --percentile=95 oltp_write_only cleanup ##清理
- 使用Sysbench测试PolarDB MySQL版集群版一主一只读节点的混合读写性能,整个过程将持续10分钟。
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=250000 --tables=25 --events=0 --time=600 oltp_read_write prepare ##准备数据 sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=250000 --tables=25 --events=0 --time=600 --threads=XXX --percentile=95 --report-interval=1 oltp_read_write run ##运行workload sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=250000 --tables=25 --events=0 --time=600 --threads=XXX --percentile=95 oltp_read_write cleanup ##清理
- 使用Sysbench测试PolarDB MySQL版集群版一主多只读节点的只读性能(对一主一只读节点到一主八只读节点的集群依次测试)。
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 oltp_read_only prepare ##准备数据 sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 --threads=XXX --percentile=95 --report-interval=1 oltp_read_only --db-ps-mode=disable --skip-trx=1 run ##运行workload sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 --threads=XXX --percentile=95 oltp_read_only cleanup ##清理
后续步骤
- PolarDB MySQL版8.0.2版本测试结果请参见PolarDB MySQL版8.0.2版本性能(集群版)。
- PolarDB MySQL版8.0.1版本测试结果请参见PolarDB MySQL版8.0.1版本性能(集群版)。
- PolarDB MySQL版5.7版本测试结果请参见PolarDB MySQL 5.7性能(集群版)。
- PolarDB MySQL版5.6版本测试结果请参见PolarDB MySQL 5.6性能(集群版)。
- PolarDB MySQL版对比RDS MySQL测试结果请参见PolarDB MySQL版与RDS MySQL性能对比。