sysbench
sysbench是基于LuaJIT的可编写多线程基准工具,可用于数据库基准测试,了解系统及数据库的基础性能相关信息,项目地址:sysbench。sysbench包含以下基准测试:
- oltp_*.lua:模拟OLTP下的数据库基准测试的集合
- fileio:文件系统基准测试
- cpu;简单的CPU基准测试
- memory:内存访问基准测试
- threads:基于线程的调度程序基准测试
- mutex:POSIX互斥基准测试
安装相关依赖及编译程序包
|
|
sysbench性能基准测试三大步骤:
- prepare:初始化测试需要的数据。例如文件系统测试中的文件或数据库测试数据填充
- run:运行指定的测试内容
- clean:测试运行完成后清理测试临时数据
文件系统测试
查看fileio选项
|
|
初始化测试文件
|
|
执行性能测试
|
|
*注:上述随机读写测试后IOPS=(6.02+4.02)1024/16=642.56
清除测试文件
|
|
mysql测试
常用数据库选项
选项 | 描述 | 默认值 |
---|---|---|
–mysql-host | mysql host | |
–mysql-port | mysql port | |
–mysql-user | mysql连接用户 | |
–mysql-password | mysql连接用户密码 | |
–mysql-db | mysql测试数据库名 | |
–oltp-tables-count | 测试表数量 | |
–oltp-table-size | 每张测试表数据量 | |
–report-interval | 指定测试进度报告输出的间隔,单位为秒 | |
–oltp-dist-type | 指定随机取样类型,可选值有uniform(均匀分布),Gaussian(高斯分布),special(空间分布) | special |
–rand-init | 否随机初始化数据,如果不随机则除了主键不一致其它字段全一致 | |
–events | 压力测试产生请求的总数,为0则不限制,由time去控制 | |
–oltp-test-mode | 执行模式,可选值有simple(简单查询)、complex(事务模式)、nontrx(非事务模式) | complex |
–oltp-read-only | 是否设置为只读模式 | OFF |
–time | 压力测试的持续时间,单位为秒 | |
–threads | 并发线程数 |
- 只读测试:需要将oltp-read-only设置为on的,也可以使用select.lua
- 混合读写测试:需要把oltp-read-only设置为off,通过分析oltp.lua可以看出单个事务操作的比例select:update_key:update_non_key:delete:insert = 14:1:1:1:1。可通过oltp-point-selects、oltp-simple-ranges、oltp-sum-ranges、oltp-order-ranges、oltp-distinct-ranges,oltp-index-updates、oltp-non-index-updates这些选项去调整读写权重
- 更新测试:如果只想比较update或insert,可以使用update_index.lua脚本,这里是更新索引列上的值
测试导入数据
|
|
执行后可能存在如下错误
|
|
解决方案
|
|
执行测试
|
|
执行后会出现如下输出
|
|
注:read表示查询数量,write表示DML数量,transactions则为TPS,Latency为响应时间,queries表示QPS
清理测试数据
|
|
TPCC-MYSQL
tpcc-mysql是percona基于TCP-C衍生的产品,专门用于MySQL TPCC测试,项目地址:tpcc-mysql。tpcc-mysql内部模拟电商环境数据,其测试表包括仓库、订单、客户,其与sysbench最大的区别在于tpcc-mysql测试过程会不断增加测试数据,而sysbench数据量则保持不变,因此能更好模拟业务不断增长下的性能表现。 安装依赖包及编译程序包
|
|
初始化测试数据
|
|
注:-w表示warehouse表的数据量,其它表会按照与这张表的比例关系插入测试数据
创建索引
|
|
启动测试
|
|
- -w:指定仓库数量
- -c:指定并发连接数
- -r:定开始测试前进行warmup的时间,进行数据预热
- -l:测试时长
- -i:生成报告间隔时长
- -f:指定生成的报告文件名,内容为timestamp对应新订单业务耗时
- -t:指定生成的报告文件名,内容为线程对应的CPU TIME
报告分析
|
|
- MEASURING START:第一列为10秒间隔时间,第二列为10秒内执行新订单交易数,第三列为95%新订单交易平均时间,第四列为99%新订单交易平均时间,第五列为新订单交易最长响应时间,第五列为支付业务的结果:吞吐量|最大响应时间,第六列为发货业务的结果,第七列为库存业务的结果
- Raw Results:分别对应五个业务模块,依次是新订单、支付、订单查询、发货、库存。sc:success表示操作成功的量,rt:retry表示操作重试的量,fl:failure为操作失败的量,avg_rt为平均重试次数
- transaction percentage:各个业务的占比
- response time:各个业务的响应时间
注:tpcc-mysql测试指标为TPMC,即一分钟的事务量,换算成TPS也就是248
mysqlslap
mysqlslap是mysql自带的基准测试功能,可以通过工具自动生成测试数据测试,也可以自身业务内容进行压力测试。详情参考:mysqlslap
|
|
我们可以通过自定义表数据,并通过–query选项来指定业务操作脚本,其中我们可以利用substring(MD5(rand()) from 1 for 32)来随机生成字符串,模拟业务增长场景。
当然我们可以看到mysqlslap的输出结果过于简单,这里我们可以通过NMON收集测试过程中的系统状态信息,通过mysqladmin -uroot -p extended-status输出数据库状态信息,对结果进行筛选汇总能得到一个更全面的信息。