创新技术实践 | MySQL基准测试实践
云能力中心创新中心 刘志锋
1
引言
2
MySQL基准测试工具
2.1 SysBench
SysBench是一个模块化,跨平台和多线程的基准测试工具。它可以执行多种类型的基准测试,不仅可以用来测试数据库的性能,也可以测试运行数据库的服务器的性能,如测试CPU/内存/线程/IO等方面的性能测试。本文主要介绍用于评估测试各种不同系统参数下的数据库负载情况。
SysBench对OLTP基准测试可以模拟测试多个简单事务处理系统的工作负载,可支持采用lua脚本编写的比较简单的测试数据库负载程序来进行基准测试。主要测试业务场景包括随机点查询(point select),简单的点更新(update where id=)和范围查询等。用户可以根据自己的业务场景,改写sysbench的lua脚本来进行测试。此外,通过改写SysBench的方式,还可以支持对MySQL集群做分发读写测试。
2.2 Tpcc-MySQL
TPC(Tracsaction Processing Performance Council)是一个针对大型数据库系统软硬件性能进行评测的非盈利的组织,它制定的TPC-C可用于规范对典型的复杂OLTP系统性能测试工作。
Tpcc-MySQL是基于TPC-C衍生出来专用于开展MySQL基准测试的工具。该工具模拟了电商环境平台,通过搭建一套可支持下单、支付、查订单、发货、查库存的运营环境,模拟各个环节,然后获取数据,来评估在当前环境下数据库系统能承担的吞吐量。相比于SysBench基准测试,Tpcc-MySQL更能够接近业务的真实负载。
2.3 YCSB
YCSB(Yahoo! Cloud Serving Benchmark)是雅虎开源的一款通用的基准测试工具。它默认提供了许多工作负载,每个工作负载可提供一些混合读写的操作、键-值存储、请求分布等。用户可以根据不同的工作负载(如:Insert、Update、Read、Scan等)多维度的对系统进行测试。
3
SysBench工具使用方法
3.1 SysBench标准OLTP实例基准测试的性能指标
(1)TPS(Transactions Per Second),每秒执行的事务数,以完成COMMIT操作的次数为准。
(2)QPS(Queries Per Second),每秒执行的SQL数,包含SELECT、INSERT、DETELE、UPDATE、COMMIT等。
(3)RT(Response Time),数据库系统对请求做出响应的时间(单位:ms)。包括最小响应时间、最大响应时间、平均响应时间等。前 95-99%的最大响应时间往往会决定该系统大多数情况下的短板。
3.2测试用例介绍
3.2.1 数据准备
(1)客户端创建空数据库:
create database sbtest;
(2)导入数据:
数据准备命令:
sysbench oltp_read_only.lua --db-driver=mysql --mysql-host=xxx --mysql-user=xxx --mysql-password=xxx --mysql-db=sbtest --table_size=100000 --tables=10 --threads=4 prepare
图1、prepare数据准备图例
图1所示是执行数据准备命令后的结果,具体实现的作用就是进入到指定的数据库服务器中,在空数据库sbtest中创建10张表,每张表的大小为10W,选择创建数据的线程为4。详细的SysBench主要参数介绍如表1所示。
表1、SysBench主要参数
3.2.2 MySQL单机版业务测试
SysBench自带的常用测试脚本如下:
(1)oltp_point_select.lua:用于测试OLTP的定点查询性能(如根据主键查询);
(2)oltp_update_index.lua:用于测试OLTP的更新索引字段的性能;
(3)oltp_read_only.lua:用于测试OLTP的只读性能;
(4)oltp_write_only.lua:用于测试OLTP的只写操作性能;
(5)oltp_read_write.lua:用于测试OLTP的读写操作性能。
测试命令:
sysbench xxx.lua --db-driver=mysql --mysql-host=xxx --mysql-user=xxx --mysql-password=xxx --mysql-db=sbtest --time=180 --table_size=100000 --tables=10 --threads=128 run
其中xxx.lua为选择的对应测试业务所需的lua脚本
3.2.3 MySQL主从模式测试
主从模式测试,使用SysBench的改写版本可以实现在一主多从部署下的只写、只读、混合读写测试:
(1)只写测试:从机空载,利用SysBench对主机进行只写压测,测试方法与单机版一致;
(2)只读测试:改写的SysBench通过测试命令指定将所有读均匀分摊到指定的从机上,每台从机接收到的读数量都是一致的;
(3)混合读写测试:改写的SysBench直接缓存与主机和从机的请求,自动将写全部定向到主机,将所有读均匀分摊到各个从机。
一主二从模式混合读写测试命令示例:
sysbench xxx.lua --db-driver=mysql --mysql-host=xxx --mysql-user=xxx --mysql-password=xxx --mysql-db=sbtest --time=180 --report-interval=10 --table_size=100000 --tables=10 --threads=128 --slaves=2 --slave-host="host1,host2" --slave-user=xxx --slave-password=xxx --slave-db=sbtest run
改写SysBench补充参数解读:
slaves:主从模式的从机数量
slave-user:从机数据库实例的用户名
slave-password:从机数据库实例的密码
slave-db: 从机数据库实例名
其中xxx.lua为选择的对应测试业务所需的lua脚本
3.2.4 测试结果分析
如图2所示,是跑出的混合读写的测试样例结果:
图2、SysBench测试结果图例
测试参数选择:128线程+10张表+10w表大小+60s测试时长
主要关注测试结果为:15652 QPS+313052 TPS+ 11.04ms RT(95%)
3.2.4 清理数据
每项测试完成,进行清空测试数据库操作
sysbench oltp_read_only.lua --db-driver=mysql --mysql-host=xxx --mysql-user=xxx --mysql-password=xxx --mysql-db=sbtest --table_size=100000 --tables=10 --threads=64 cleanup
4
Tpcc-MySQL工具使用方法
4.1 Tpcc-MySQL的业务逻辑及相关表
(1)业务逻辑
New_Order:新订单,处理一次完整的订单事务
Payment:支付,客户账户余额更新,反映其支付情况
Order-Status:订单状态,客户最新交易状态查询
Delivery:发货(模拟批处理交易)
Stock-Level:库存,仓库库存状况查询,便于商家能够及时补货
(2)相关表
Customer:客户表
District:地区表
Item:商品表
Warehouse:仓库表
4.2主要测试性能指标
TpmC(transactions per minute): 每分钟处理订单交易的能力。即在数据库系统执行支付操作、订单状态查询、发货任务和查询库存状态这4种交易的同时,该指标每分钟能够处理新订单交易的个数。此外,所有交易数量所占的比例需要满足TPC-C规范的要求,且各种交易数量所占的比例也应该满足TPC-C规范的要求。在这种情况下,TpmC值越大说明系统的OLTP能力越高。
4.3测试用例介绍
4.3.1 数据准备
(1)客户端创建空数据库:
create database tpcctest;
(2)创建测试表结构:
./bin/mysql -uroot -p tpcctest < create_table.sql
./bin/mysql -uroot -p tpcctest < add_fkey_idx.sql
(3)创建数据:
使用命令行工具tpcc_load来提供初始化数据的功能。
如表2所示,介绍了Tpcc-MySQL在测试过程中常用的参数,需要特别介绍的是warehouses,它代表了电商仓库的数量,每个仓库负责一定区域,每个顾客购买商品会随机选择一个仓库,在这个仓库中随机选择一些物品,仓库数量越多意味着测试的数据集越大(如果warehouses设置为2500,会创建160GB左右的数据,warehouses设为5000时,数据量大小在280GB左右)。
表2、Tpcc-MySQL测试参数介绍
数据加载命令:
./tpcc_load -h xxx -P 3306 -d tpcctest -u xxx -p xxx -w 10
图3示例显示了配置过程,创建了一个小型(十个仓库)测试数据集,数据库名为tpcctest。
图3、Tpcc-MySQL数据创建图例
4.3.2 业务场景测试
使用命令行工具tpcc_start来进行压力测试。
./tpcc_start -h xxx -P 3306 -d tpcctest -u root -p '' -w 10 -c 32 -r 180 -l 360 -i 10 -f tpcc-mysql.log -t tpcc_mysql.rtx
图4、Tpcc-MySQL测试图例
图4为执行测试命令后的部分显示内容。在该项测试过程中选择的仓库数为10,连接数为32,热身时长为180s,测试时长为360s,打印报告的间隔时间为10s,各项操作记录输出到tpcc-mysql.log文件中,更详细的操作信息输出到tpcc_mysql.rtx中。
4.3.2 测试结果分析
如图5所示,是跑出的tpcc业务场景测试结果:
图5、Tpcc-MySQL测试结果图例
测试结果的含义分别如下:
[0]:新订单业务
[1]:支付业务
[2]:订单状态查询业务
[3]:物流相关业务
[4]:仓储相关业务
<Raw Results>表示tpcc事务执行期间,5种事务执行情况。其中:
sc: 表示执行成功且请求延时在最大阀值之内(5ms)的事务数
lt: 表示执行成功,但请求延时在最大阀值之外(5ms)的事务数
rt: 表示通过重试后执行成功的事务数
fl: 表示执行失败的事务数
avg_rt: 表示事务的平均处理延迟
主要测试结果:TmpC=96812.164
5
结语
●