MySQL 数据库集群-PXC 方案(三)
什么是基准测试
基准测试是针对系统的一种压力测试,但基准测试不关心业务逻辑,更加简单、直接、易于测试,不要求数据的真实性和逻辑关系。
基准测试的指标
Sysbench 简介
Sysbench 是一个模块化的、跨平台、多线程基准测试工具,主要用于测试系统及数据库的性能。它主要包括以下几种方式的测试:CPU 性能(系统级别)
磁盘 IO 性能(系统级别)
调度程序性能(系统级别)
内存分配及传输速度(系统级别)
POSIX 线程性能(系统级别)
数据库性能(OLTP 基准测试)
目前 Sysbench 主要支持 MySQL,pgsql,oracle 这 3 种数据库。
安装 Sysbenchcurl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash
yum -y install sysbench
安装完成后查看是否安装成功sysbench --version
Sysbench 基本语法sysbench script [option] [command]
option 连接信息参数参数名称功能意义--mysql-hostIP 地址
--mysql-port端口号
--mysql-user用户名
--mysql-password密码
option 执行参数参数名称功能意义--oltp-test-mode执行模式(simple、nontrx、complex)
--oltp-tables-count测试表的数量
--oltp-table-size测试表的记录数
--threads并发连接数
--time测试执行时间(秒)
--report-interval生成报告单的间隔时间(秒)
执行模式:simple: 测试查询 不测试写入
nontrx:测试无事务的增删改查
complex:测试有事务的增删改查
command 命令命令名称功能意义prepare准备测试数据
run执行测试
cleanup清除测试数据
准备测试数据
在准备之前我们先修改一下haproxy.cfg文件,之前我们配置的是 MyCat 集群的负载均衡,现在改为某一个分片的 PXC 集群即可。vim /etc/haproxy/haproxy.cfgserver mysql_1 192.168.3.137:3306 check port 3306 weight 1 maxconn 2000
server mysql_1 192.168.3.138:3306 check port 3306 weight 1 maxconn 2000
server mysql_1 192.168.3.139:3306 check port 3306 weight 1 maxconn 2000
保存之后执行命令重启service haproxy restart
可以看到下图没有问题:
之后我们新建一个测试逻辑库sbtest
接着我们创建测试数据sysbench /usr/share/sysbench/tests/include/oltp_legacy/oltp.lua --mysql-host=192.168.3.146 --mysql-port=3306 --mysql-user=admin --mysql-password=Abc_123456 --oltp-tables-count=10 --oltp-table-size=100000 prepare/usr/share/sysbench/tests/include/oltp_legacy/oltp.lua : 生成测试数据的脚本 sysbench 自带
--mysql-host :数据库连接地址
--mysql-port : 端口
--mysql-user:用户名
--mysql-password:密码
--oltp-tables-count:测试 10 个数据表
--oltp-table-size:每张表 10 万条数据
prepare:准备测试数据
创建完成后我们执行测试sysbench /usr/share/sysbench/tests/include/oltp_legacy/oltp.lua --mysql-host=192.168.3.146 --mysql-port=3306 --mysql-user=admin --mysql-password=Abc_123456 --oltp-test-mode=complex --threads=10 --time=300 --report-interval=10 run >> /home/mysysbench.log--oltp-test-mode=complex:测试有事务的增删改查
--threads:并发连接数
--time:测试时长,测试的时长更长一些,比如 24 小时,测试的结果会更加准确
--report-interval=10 :每隔 10 秒回报一次数据
run >> /home/mysysbench.log:输入测试日志报告文件位置
等待 5 分钟执行完成后,我们查看 /home/mysysbench.log。
queries performed : 执行测试的次数
read : 读操作执行了 442176 次
write : 写操作执行了 117484 次
other:其他操作执行了 66275 次
total:总共执行了 625935 次
transcations(TPS):执行的事务次数 28415 次,PXC 集群每秒可以执行的事务操作 94.67 次
queries(QPS):处理的请求书 625935,PXC 集群每秒钟可以执行 2085.35 次增删改查操作
ignored errors: 忽略的错误数量 3169,每秒钟平均错误数量 10.56 次,可能是节点之间冲突造成
reconnects:数据库重新连接的次数,0 代表没有发生数据库连接断开的情况
清理测试数据:sysbench /usr/share/sysbench/tests/include/oltp_legacy/oltp.lua --mysql-host=192.168.3.146 --mysql-port=3306 --mysql-user=admin --mysql-password=Abc_123456 --oltp-tables-count=10 cleanup
小结
基准测试是对单张表进行的读写测试,因为不涉及表连接外键约束,索引等操作,所以单纯体现的是数据库硬件性能。如果想知道数据库集群在真实业务中的实际性能,需要使用压力测试。
tpcc-mysql 简介
tpcc-mysql 是 percona 基于 tpcc 规范衍生出来的产品,专门用于 mysql 压力测试 。
tpcc 是一种测试标准,明确规定了数据模型和检测是指标,而且检测的标准对数据库集群来说很苛刻,tpcc-mysql 的测试库能覆盖大多数的业务场景,测试的结果也能反映出真实业务中数据库的实际性能。
tpcc 测试问题
tpcc 的检测标准是针对单节点的 mysql 数据库,对 sql 的执行时间有严格的规定,我们要测试的 PXC 集群是以牺牲插入速度为代价换取的同步强一致性,假如 tpcc 要执行一个 insert 语句不能超过 100ms,但是 PXC 集群只是写入速度慢,插入执行了 300ms。这个检测点就没有通过,所以拿 tpcc 测试 PXC 集群不太适合,检测的标准太苛刻了一些,但是因为数据库集群在真实业务下实际的读写性能,每秒钟能执行多少次读操作,多少次写操作。至于由于插入速度慢测试报告中测试没有通过,可以不予理会。
测试方案
我们还是以 haproxy+三个 mysql 节点的