如何从入门到自定义sysbench测试项进行MySQL性能压测?
摘要:sysbench是一个开源的、基于LuaJIT(LuaJIT 是 Lua 的即时编译器,可将代码直接翻译成机器码,性能比原生 lua 要高) 的、可自定义脚本的多线程基准测试工具,也是目前用得最多的 MySQL 性
sysbench是一个开源的、基于LuaJIT(LuaJIT 是 Lua 的即时编译器,可将代码直接翻译成机器码,性能比原生 lua 要高)的、可自定义脚本的多线程基准测试工具,也是目前用得最多的 MySQL 性能压测工具。
基于 sysbench,我们可以对比 MySQL 在不同版本、不同硬件配置、不同参数(操作系统和数据库)下的性能差异。
下面会从 sysbench 的基本用法出发,逐渐延伸到 sysbench 的一些高级玩法,譬如如何阅读自带的测试脚本、如何自定义测试项等。除此之外,使用 sysbench 对 CPU 进行测试,网上很多资料都语焉不详,甚至是错误的,所以这次也会从源码的角度分析 CPU 测试的实现逻辑及 --cpu-max-prime 选项的具体含义。
本文主要包括以下几部分:
安装sysbench
sysbench用法讲解
对MySQL进行基准测试的基本步骤
如何分析MySQL基准测试结果
如何使用sysbench对服务器进行测试
MySQL常见测试场景及对应的 SQL 语句
如何自定义sysbench测试脚本
安装 sysbench
下面是 sysbench 源码包的安装步骤。
#yum-yinstallmakeautomakelibtoolpkgconfiglibaio-developenssl-develmysql-devel
#cd/usr/src/
#wgethttps://github.com/akopytov/sysbench/archive/refs/tags/1.0.20.tar.gz
#tarxvf1.0.20.tar.gz
#cdsysbench-1.0.20/
#./autogen.sh
#./configure
#make-j
#makeinstall
安装完成后,压测脚本默认会安装在/usr/local/share/sysbench目录下。
我们看看该目录的内容。
#ls/usr/local/share/sysbench/
bulk_insert.luaoltp_insert.luaoltp_read_write.luaoltp_write_only.luatests
oltp_common.luaoltp_point_select.luaoltp_update_index.luaselect_random_points.lua
oltp_delete.luaoltp_read_only.luaoltp_update_non_index.luaselect_random_ranges.lua
除了oltp_common.lua是个公共模块,其它每个 lua 脚本都对应一个测试场景。
sysbench 用法讲解
sysbench 命令语法如下:
sysbench[options]...[testname][command]
命令中的testname是测试项名称。sysbench 支持的测试项包括:
*.lua:数据库性能基准测试。
fileio:磁盘 IO 基准测试。
cpu:CPU 性能基准测试。
memory:内存访问基准测试。
threads:基于线程的调度程序基准测试。
mutex:POSIX 互斥量基准测试。
command是 sysbench 要执行的命令,支持的选项有:prepare,prewarm,run,cleanup,help。注意,不是所有的测试项都支持这些选项。
options是配置项。sysbench 中的配置项主要包括以下两部分:
1. 通用配置项。这部分配置项可通过sysbench --help查看。例如,
#sysbench--help
...
Generaloptions:
--threads=Nnumberofthreadstouse[1]
--events=Nlimitfortotalnumberofevents[0]
--time=Nlimitfortotalexecutiontimeinseconds[10]
...
2. 测试项相关的配置项。各个测试项支持的配置项可通过sysbench testname help查看。
