数据库教程:sysbench对mysql压力测试的详细教程分享

前言

在对网站整体性能进行benchmark时,可以使用多种工具,比如大名鼎鼎的ab(Apachebench),http_load等工具。这里我们不关注他们的使用,如果你想了解,可以自行在网上找到答案。

重点来说MySQL的基准测试如何进行,也有很多种工具来供我们选择,比如mysqlslap、sysbench、SuperSmack等,其中mysqlslap的使用MySQL官网给出了介绍,SuperSmack是服务器压力测试强有力的工具,那么sysbench便是我们进行MySQL基准测试的很漂亮的工具了。

sysbench

sysbench是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试。数据库目前支持MySQL/Oracle/PostgreSQL;

它主要包括以下几种方式的测试:

    1、cpu性能

    2、磁盘io性能

    3、调度程序性能

    4、内存分配及传输速度

    5、POSIX线程性能

     6、数据库性能(OLTP基准测试)

sysbench的数据库OLTP测试支持MySQL、PostgreSQL、Oracle,目前主要用于Linux操作系统,开源社区已经将sysbench移植到了Windows,并支持SQLServer的基准测试。

废话不多说,开始。

一、sysbench安装

mysql版本:mysql-community-server-5.6.29

OS:CentOS6.7X86_64

sysbench0.5相比0.4版本有一些变化,包括oltp测试结合了lua脚本,还多了一些隐藏选项,本文会涉及得到一部分。

//先安装编译依赖环境 $sudoyuminstallgccgcc-c++automakemakelibtoolmysql-community-devel $cd/tmp&&gitclonehttps://github.com/akopytov/sysbench.git $cd/tmp/sysbench&&./autogen.sh $./configure--prefix=/usr/local/sysbench-0.5 $./make&&sudomakeinstall //0.5版本需要oltp.lua测试脚本 //如果是rpm包方式安装的,在/usr/share/doc/sysbench/tests/db/下可找到 $cd/usr/local/sysbench&&sudomkdir-pshare/tests/db $cp/tmp/sysbench/sysbench/tests/db/*.luashare/tests/db/ $./bin/sysbench--version sysbench0.5

如果需要测试PostgreSQL、Oracle,则在configure时需要加上–with-oracle或者–with-pgsql参数

二、使用sysbench对mysql压测

2.1只读示例

./bin/sysbench--test=./share/tests/db/oltp.lua --mysql-host=10.0.201.36--mysql-port=8066--mysql-user=ecuser--mysql-password=ecuser --mysql-db=dbtest1a--oltp-tables-count=10--oltp-table-size=500000 --report-interval=10--oltp-dist-type=uniform--rand-init=on--max-requests=0 --oltp-test-mode=nontrx--oltp-nontrx-mode=select --oltp-read-only=on--oltp-skip-trx=on --max-time=120--num-threads=12 [prepare|run|cleanup]

注意最后一行,一项测试开始前需要用prepare来准备好表和数据,run执行真正的压测,cleanup用来清除数据和表。实际prepare的表结构:

mysql>descdbtest1a.sbtest1; +-------+------------------+------+-----+---------+----------------+ |Field|Type|Null|Key|Default|Extra| +-------+------------------+------+-----+---------+----------------+ |id|int(10)unsigned|NO|PRI|NULL|auto_increment| |k|int(10)unsigned|NO|MUL|0|| |c|char(120)|NO|||| |pad|char(60)|NO|||| +-------+------------------+------+-----+---------+----------------+ 4rowsinset(0.00sec)

上面的测试命令代表的是:对mysql进行oltp基准测试,表数量10,每表行数约50w(几乎delete多少就会insert的多少),并且是非事务的只读测试,持续60s,并发线程数12。

需要说明的选项:

    mysql-db=dbtest1a:测试使用的目标数据库,这个库名要事先创建

    --oltp-tables-count=10:产生表的数量

    --oltp-table-size=500000:每个表产生的记录行数

    --oltp-dist-type=uniform:指定随机取样类型,可选值有uniform(均匀分布),Gaussian(高斯分布),special(空间分布)。默认是special

    --oltp-read-only=off:表示不止产生只读SQL,也就是使用oltp.lua时会采用读写混合模式。默认off,如果设置为on,则不会产生update,delete,insert的sql。

    --oltp-test-mode=nontrx:执行模式,这里是非事务式的。可选值有simple,complex,nontrx。默认是complex

            simple:简单查询,SELECTcFROMsbtestWHEREid=N

            complex(advancedtransactional):事务模式在开始和结束事务之前加上begin和commit,一个事务里可以有多个语句,如点查询、范围查询、排序查询、更新、删除、插入等,并且为了不破坏测试表的数据,该模式下一条记录删除后会在同一个事务里添加一条相同的记录。

            nontrx(non-transactional):与simple相似,但是可以进行update/insert等操作,所以如果做连续的对比压测,你可能需要重新cleanup,prepare。

    --oltp-skip-trx=[on|off]:省略begin/commit语句。默认是off

     --rand-init=on:是否随机初始化数据,如果不随机化那么初始好的数据每行内容除了主键不同外其他完全相同

    --num-threads=12:并发线程数,可以理解为模拟的客户端并发连接数

    --report-interval=10:表示每10s输出一次测试进度报告

    --max-requests=0:压力测试产生请求的总数,如果以下面的max-time来记,这个值设为0

    --max-time=120:压力测试的持续时间,这里是2分钟。

注意,针对不同的选项取值就会有不同的子选项。比如oltp-dist-type=special,就有比如oltp-dist-pct=1、oltp-dist-res=50两个子选项,代表有50%的查询落在1%的行(即热点数据)上,另外50%均匀的(sampleuniformly)落在另外99%的记录行上。

再比如oltp-test-mode=nontrx时,就可以有oltp-nontrx-mode,可选值有select(默认),update_key,update_nokey,insert,delete,代表非事务式模式下使用的测试sql类型。

上述就是数据库技术:sysbench对mysql压力测试的详细教程分享的全部内容,如果对大家有所用处且需要了解更多关于mysql数据库学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/dtteaching/912291.html

(0)
上一篇 2021年10月25日
下一篇 2021年10月25日

精彩推荐