本文档介绍以Sysbench工具测试PolarDB MySQL版集群OLTP负载性能,您可以按照本文介绍自行测试对比,快速了解数据库系统的性能。
测试工具
Sysbench是一个跨平台且支持多线程的模块化基准测试工具,用于评估系统在运行高负载的数据库时相关核心参数的性能表现。使用Sysbench是为了绕过复杂的数据库基准设置,甚至在没有安装数据库的前提下,快速了解数据库系统的性能。
测试环境
测试的ECS和PolarDB MySQL版均在同一地域、同一可用区。
网络类型均为VPC网络。
说明ECS实例和PolarDB MySQL版集群需保证在同一个VPC中。
测试用PolarDB MySQL版集群如下:
测试用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=testdb --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=testdb --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=testdb --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=testdb --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=testdb --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=testdb --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=testdb --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=testdb --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=testdb --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=testdb --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=testdb --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=testdb --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性能对比。