创新技术实践 | MySQL基准测试实践

Posted 移动Labs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创新技术实践 | MySQL基准测试实践相关的知识,希望对你有一定的参考价值。

云能力中心创新中心 刘志锋

本文首先分析了mysql基准测试的必要性,随后简要介绍了几种常用的MySQL基准测试工具,接下来针对两个常用的工具(SysBench和Tpcc-MySQL)进行了测试案例分享,主要进行了性能指标的解读及测试流程的介绍,最后对本文的工作进行了总结。


1


引言




MySQL作为软件开发人员工作中使用最多的数据库之一,了解它的性能情况是十分必要的。作为一种测量和评估软件性能指标的手段,基准测试可以通过建立在某个时间点的性能基准,方便了数据库开发人员在对系统优化后重新进行基准测试以评估变化对性能的影响。所以,通过对MySQL进行基准测试,建立性能基准线,可方便数据库开发人员了解对数据库的性能优化是否达到了预期的效果。常用的MySQL基准测试工具包括SysBench、Tpcc-MySQL、YCSB等。



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

创新技术实践 | MySQL基准测试实践

图1、prepare数据准备图例


图1所示是执行数据准备命令后的结果,具体实现的作用就是进入到指定的数据库服务器中,在空数据库sbtest中创建10张表,每张表的大小为10W,选择创建数据的线程为4。详细的SysBench主要参数介绍如表1所示。

创新技术实践 | MySQL基准测试实践

表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所示,是跑出的混合读写的测试样例结果:

创新技术实践 | MySQL基准测试实践

图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左右)。

创新技术实践 | MySQL基准测试实践

表2、Tpcc-MySQL测试参数介绍


数据加载命令:


./tpcc_load -h xxx -P 3306 -d tpcctest -u xxx -p xxx  -w 10


图3示例显示了配置过程,创建了一个小型(十个仓库)测试数据集,数据库名为tpcctest。

创新技术实践 | MySQL基准测试实践

图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

创新技术实践 | MySQL基准测试实践

图4、Tpcc-MySQL测试图例


图4为执行测试命令后的部分显示内容。在该项测试过程中选择的仓库数为10,连接数为32,热身时长为180s,测试时长为360s,打印报告的间隔时间为10s,各项操作记录输出到tpcc-mysql.log文件中,更详细的操作信息输出到tpcc_mysql.rtx中。


4.3.2 测试结果分析


如图5所示,是跑出的tpcc业务场景测试结果:

创新技术实践 | MySQL基准测试实践

图5、Tpcc-MySQL测试结果图例


测试结果的含义分别如下:


[0]:新订单业务

[1]:支付业务

[2]:订单状态查询业务

[3]:物流相关业务

[4]:仓储相关业务

<Raw Results>表示tpcc事务执行期间,5种事务执行情况。其中:

sc: 表示执行成功且请求延时在最大阀值之内(5ms)的事务数

lt: 表示执行成功,但请求延时在最大阀值之外(5ms)的事务数

rt: 表示通过重试后执行成功的事务数

fl: 表示执行失败的事务数

avg_rt: 表示事务的平均处理延迟

主要测试结果:TmpC=96812.164




5


结语




MySQL基准测试是数据库性能优化中非常重要的一个环节,针对不同的业务场景采用不同的基准测试方案。如果用户只是想测试简单的OLTP事务,可以选择采用SysBench来做基准测试。如果需要模拟一个完整的事务处理系统,可以采用Tpcc-MySQL来进行基准测试。当然,在MySQL系统上运行基准测试,就其技术本身而言在日常业务运维也是非常必要的,希望这些测试实例可以对大家开展相关基准测试工作能有所帮助。



创新技术实践 | MySQL基准测试实践

创新技术实践 | MySQL基准测试实践




●  


以上是关于创新技术实践 | MySQL基准测试实践的主要内容,如果未能解决你的问题,请参考以下文章

智领服务创新,新华三分享云原生DevOps最佳实践

hadoop 基准测试的最佳实践是啥?

腾讯专家讲解:微信支付HBase实践与创新

短视频内容理解与生成技术在美团的创新实践

基于java+jsp+ssm创新实践学分认定系统

机器人技术创新与实践旧版本大纲