Loading... !!! <h1>0x00</h1> 使用sysbench进行测试 安装:<code>apt install sysbench</code> <h1>0x01一般语法</h1> <code>prepare</code>:用于文件IO和数据库OLTP测试的数据准备阶段。 <code>run</code>:性能测试阶段 <code>cleanup</code>:移除测试过程中产生的数据 <code>help</code>:显示帮助信息,获取--test帮助可以使用--test=name --help <h3>主要参数</h3> <code>--num-threads</code> <code>--max-requests</code> <code>--test</code> 以下几个参数也经常会使用: <code>--max-time</code> 最大的测试时长 <code>--debug</code>(开启debug可以显示更详细的每个线程的执行情况) <h1>0x02测试</h1> <h3>cpu测试</h3> 对CPU的性能测试通常有:1. 通过算质数;2计算圆周率等;sysbench使用的就是通过质数相加的测试。对CPU测试直接运行run即可 <pre>sysbench --num-threads=<span>12</span> --max-requests=<span>10000</span> --debug=on --test=cpu --cpu-max-prime=<span>20000</span> run</pre> 上面的测试是:12个线程执行1万条请求,每个请求执行质数相加到20000 <h3>线程测试</h3> 测试线程调度的性能,用于高负载下的线程性能测试。 <code>--thread-yields=N</code> 每个请求执行“lock/yield/unlock”循环的次数,默认1000 <code>--thread-locks=N</code> 每个线程的互斥锁,默认8个 <pre>./sysbench --num-threads=<span>12</span> --max-requests=<span>10000</span> --test=threads --thread-yields=<span>100</span> --thread-locks=<span>2</span> run</pre> <h3>内存测试</h3> 内存分配测试,主要是针对不同的块大小进行内存的连续读写或者随机读写测试。 <h5><strong>1.8k顺序分配</strong></h5> <pre>./sysbench --num-threads=<span>12</span> --max-requests=<span>10000</span> --test=memory --memory-block-size=8K --memory-total-size=100G --memory-access-mode=seq run</pre> <h5><strong>2.8k随机分配</strong></h5> <pre>./sysbench --num-threads=<span>12</span> --max-requests=<span>10000</span> --test=memory --memory-block-size=8K --memory-total-size=100G --memory-access-mode=rnd run</pre> <h5><strong>3.16K顺序分配</strong></h5> <pre>./sysbench --num-threads=<span>12</span> --max-requests=<span>10000</span> --test=memory --memory-block-size=16K --memory-total-size=100G --memory-access-mode=seq run</pre> <h5><strong>4.16K随机分配</strong></h5> <pre>./sysbench --num-threads=<span>12</span> --max-requests=<span>10000</span> --test=memory --memory-block-size=16K --memory-total-size=100G --memory-access-mode=rnd run</pre> <span>总结:对于分配同样大小的内存,块月大分配的速率越快,随机分配比顺序分配的速度要快</span> <h3>文件IO测试</h3> 文件IO的测试主要用于测试IO的负载性能。主要的测试选项为--file-test-mode。还有几个可以关注的参数包括--file-block-size、--file-io-mode、--file-fsync-freq 、--file-rw-ratio <pre>--file-num=<span>N 创建测试文件的数量,默认128个 </span>--file-block-size=<span>N block size大小,默认16K </span>--file-total-size=<span>SIZE 所有文件的总大小,默认2G </span>--file-test-mode=<span>STRING 测试类型 {seqwr(顺序写), seqrewr(顺序读写), seqrd(顺序读), rndrd(随机读), rndwr(随机写), rndrw(随机读写)} </span>--file-io-mode=STRING I/O模式,需要系统支持默认sync[sync(同步IO),<span>async</span><span>(异步IO),mmap()] </span>--file-<span>async</span>-backlog=N 每个线程的异步操作队列数,默认128个,需要--file-io-mode=<span>async</span><span>; </span>--file-extra-flags=<span>STRING additional flags to use on opening files {sync,dsync,direct} [] </span>--file-fsync-freq=<span>N 当请求数达到多少时执行fsync()刷新,默认100,0代表过程中不执行fsync() </span>--file-fsync-all=[on|<span>off] 执行每一个写操作后执行fsync()刷新操作,默认关闭off </span>--file-fsync-end=[on|<span>off] 测试结束执行fsync()操作,默认开启on </span>--file-fsync-mode=<span>STRING 同步刷新方法,默认fsync {fsync, fdatasync} </span>--file-merged-requests=<span>N 合并指定数量的IO请求,0代表不合并,默认0 </span>--file-rw-ratio=N 读写比例,默认1.<span>5</span>/<span>1</span><span> </span></pre> <pre>./sysbench --num-threads=<span>12</span> --max-requests=<span>10000</span> --test=fileio --file-total-size=<span>3G </span>--file-test-mode=<span>rndrw prepare .</span>/sysbench --num-threads=<span>12</span> --max-requests=<span>10000</span> --test=fileio --file-total-size=3G --file-test-mode=<span>rndrw run .</span>/sysbench --num-threads=<span>12</span> --max-requests=<span>10000</span> --test=fileio --file-total-size=<span>3G </span>--file-test-mode=rndrw clean</pre> 注意:如果要对比两台服务器的io性能,需要跑相同的线程。 <h3 id="blogTitle7">互斥锁测试</h3> 互斥锁测试模拟所有线程在同一时刻并发运行 <pre>./sysbench --num-threads=<span>12</span> --test=mutex --mutex-num=<span>1024</span> --mutex-locks=<span>10000</span> --mutex-loops=<span>10000</span> run</pre> <h3>oltp测试</h3> oltp是针对数据库的基准测试,例如每次对数据库进行优化后执行基准测试来测试不同的配置的tps。 <pre>--oltp-test-mode=<span>STRING 测试类型:simple(简单select测试),complex(事务测试),nontrx(非事务测试),sp(存储过程) ;默认complex </span>--oltp-reconnect-mode=<span>STRING 连接类型:session(每个线程到测试结束不重新连接),transaction(执行每个事务重新连接),query(每一个查询重新连接),random(随机);默认 [session] </span>--oltp-sp-name=<span>STRING 指定执行测试的存储过程名 </span>--oltp-read-only=[on|<span>off] 仅执行select测试,默认关闭 </span>--oltp-avoid-deadlocks=[on|<span>off] 更新过程中忽略死锁,默认[off] </span>--oltp-skip-trx=[on|off] 语句以bigin/<span>commit开始结尾,默认[off] </span>--oltp-range-size=N 范围查询的范围大小,默认 [<span>100</span>],例如begin <span>100</span> and <span>200</span> --oltp-point-selects=N 单个事务中select查询的数量,默认 [<span>10</span><span>] </span>--oltp-use-<span>in</span>-statement=N 每个查询中主键查找(<span>in</span> 10个值)的数量,默认 [<span>0</span><span>] </span>--oltp-simple-ranges=N 单个事务中执行范围查询的数量(SELECT c FROM sbtest WHERE id BETWEEN N AND M),默认[<span>1</span><span>] </span>--oltp-sum-ranges=N 单个事务中执行范围sum查询的数量,默认 [<span>1</span><span>] </span>--oltp-order-ranges=N 单个事务中执行范围order by查询的数量,默认[<span>1</span><span>] </span>--oltp-distinct-ranges=N 单个事务中执行范围distinct查询的数量,默认[<span>1</span><span>] </span>--oltp-index-updates=N 单个事务中执行索引更新的操作的数量,默认[<span>1</span><span>] </span>--oltp-non-index-updates=N 单个事务中执行非索引更新操作的数量,默认[<span>1</span><span>] </span>--oltp-nontrx-mode=STRING 指定单独非事务测试类型进行测试,默认select {<span>select</span>, update_key, update_nokey, insert, delete} [<span>select</span><span>] </span>--oltp-auto-inc=[on|<span>off] id列默认自增,默认[on] </span>--oltp-connect-delay=N 指定每一次重新连接延时的时长,默认1秒 [<span>10000</span><span>] </span>--oltp-user-delay-min=N minimum time <span>in</span> microseconds to sleep after each request [<span>0</span><span>] </span>--oltp-user-delay-max=N maximum time <span>in</span> microseconds to sleep after each request [<span>0</span><span>] </span>--oltp-table-name=<span>STRING 指定测试的表名,默认[sbtest] </span>--oltp-table-size=N 指定表的记录大小,默认[<span>10000</span><span>] </span>--oltp-dist-type=<span>STRING 随机数分布状态。uniform(均匀分布)、gauss(高斯分布)、special(特殊分布),默认 [special] </span>--oltp-dist-iter=N number of iterations used <span>for</span> numbers generation [<span>12</span><span>] </span>--oltp-dist-pct=N 启用百分比特殊分布,默认 [<span>1</span><span>] </span>--oltp-dist-res=N special 百分比[<span>75</span><span>] </span>--oltp-point-<span>select</span>-mysql-handler=[on|off] Use MySQL HANDLER <span>for</span> point <span>select</span><span> [off] </span>--oltp-point-<span>select</span>-all-cols=[on|<span>off] select查询测试时select所有列,默认[off] </span>--oltp-secondary=[on|<span>off] 索引不是主键索引而是二级索引,默认[off] </span>--oltp-num-partitions=N 指定表分区的数量,默认 [<span>0</span><span>] </span>--oltp-num-tables=N 指定测试表的数量,默认[<span>1</span><span>] General database options: </span>--db-driver=<span>STRING 指定测试数据库类型,默认mysql </span>--db-ps-mode=<span>STRING prepared statements usage mode {auto, disable} [auto] mysql options: </span>--mysql-host=<span>[LIST,...] MySQL server host [localhost] </span>--mysql-port=N MySQL server port [<span>3306</span><span>] </span>--mysql-socket=<span>STRING MySQL socket </span>--mysql-user=<span>STRING MySQL user [sbtest] </span>--mysql-password=<span>STRING MySQL password [] </span>--mysql-db=<span>STRING MySQL database name [sbtest] </span>--mysql-table-engine=STRING storage engine to use <span>for</span><span> the test table {myisam,innodb,bdb,heap,ndbcluster,federated} [innodb] </span>--mysql-engine-trx=STRING whether storage engine used <span>is</span><span> transactional or not {yes,no,auto} [auto] </span>--mysql-ssl=[on|off] use SSL connections, <span>if</span> available <span>in</span><span> the client library [off] </span>--myisam-max-rows=N max-rows parameter <span>for</span> MyISAM tables [<span>1000000</span><span>] </span>--mysql-create-options=STRING additional options passed to CREATE TABLE []</pre> <strong>oltp</strong><strong>测试主要会有以下相关参数的测试,,</strong><strong>其它相关参数默认即可,有需求也可以自定义:</strong> <div class="cnblogs_code"> <pre>--mysql-engine-trx=<span>STRING 指定不同的存储引擎测试。 </span>--oltp-test-mode=<span>STRING 测试类型:simple(简单select测试),complex(事务测试),nontrx(非事务测试),sp(存储过程) ;默认complex </span>--oltp-sp-name=<span>STRING 指定存储过程进行语句测试 </span>--oltp-table-size=N 指定表的记录大小,默认[<span>10000</span><span>] </span>--oltp-num-tables=N 指定测试表的数量,默认[<span>1</span>]</pre> </div> 需要先创建好测试数据库sbtest。 1.事务测试,测试12个线程执行1万条请求,10个表,每个表大小100W <pre>./sysbench --num-threads=<span>12</span> --max-requests=<span>100000</span> --test=oltp --mysql-user=root --mysql-password=root --oltp-test-mode=complex --mysql-db=sbtest --oltp-table-size=<span>1000000</span> --oltp-num-tables=<span>10</span> prepare</pre> <pre>./sysbench --num-threads=<span>12</span> --max-requests=<span>100000</span> --test=oltp --mysql-user=root --mysql-password=root --oltp-test-mode=complex --mysql-db=sbtest --oltp-table-size=<span>1000000</span> --oltp-num-tables=<span>10</span> run</pre> <pre>./sysbench --num-threads=<span>12</span> --max-requests=<span>100000</span> --test=oltp --mysql-user=root --mysql-password=root --oltp-test-mode=complex --mysql-db=sbtest --oltp-table-size=<span>1000000</span> --oltp-num-tables=<span>10</span> cleanup</pre> !!! Last modification:October 24, 2019 © Allow specification reprint Support Appreciate the author AliPayWeChat Like 0 如果觉得我的文章对你有用,请随意赞赏