Sysbench1.0使用手册

欢迎关注MySQL 8.0必知必会系列课程。

    MySQL8.0必知必会-自动化部署              https://edu.51cto.com/course/16368.html

    MySQL8.0必知必会之参数标准化配置       https://edu.51cto.com/course/16358.html


1 介绍

本文主要介绍sysbench1.0的版本和sysbench-tpcc

真实测试场景中,数据表建议不低于10个,单表数据量不低于500万行,当然了,要视服务器硬件配置而定。如果是配备了SSD或者PCIE SSD这种高IOPS设备的话,则建议单表数据量最少不低于1亿行。

2 部署

2.1 官方主页

https://github.com/Percona-Lab/sysbench-tpcc

https://github.com/akopytov/sysbench

2.2 安装

Percona安装源(yum源)

[root@zhumh ~]# wget https://www.percona.com/redir/downloads/percona-release/redhat/0.1-6/percona-release-0.1-6.noarch.rpm

[root@zhumh ~]# yum -y install percona-release-0.1-6.noarch.rpm

[root@zhumh ~]# yum -y install sysbench

[root@zhumh ~]# yum -y install sysbench-tpcc

3 帮助文档

[root@zhumh ~]# sysbench --help

Usage:

sysbench [options]... [testname] [command]

Commands implemented by most tests: prepare run cleanup help

General options:

--threads=N number of threads to use [1]

--events=N limit for total number of events [0]

--time=N limit for total execution time in seconds [10]

--forced-shutdown=STRING number of seconds to wait after the --time limit before forcing shutdown, or 'off' to disable [off]

--thread-stack-size=SIZE size of stack per thread [64K]

--rate=N average transactions rate. 0 for unlimited rate [0]

--report-interval=N periodically report intermediate statistics with a specified interval in seconds. 0 disables intermediate reports [0]

--report-checkpoints=[LIST,...] dump full statistics and reset all counters at specified points in time. The argument is a list of comma-separated values representing the amount of time in seconds elapsed from start of test when report checkpoint(s) must be performed. Report checkpoints are off by default. []

--debug[=on|off] print more debugging info [off]

--validate[=on|off] perform validation checks where possible [off]

--help[=on|off] print help and exit [off]

--version[=on|off] print version and exit [off]

--config-file=FILENAME File containing command line options

--tx-rate=N deprecated alias for --rate [0]

--max-requests=N deprecated alias for --events [0]

--max-time=N deprecated alias for --time [0]

--num-threads=N deprecated alias for --threads [1]

Pseudo-Random Numbers Generator options:

--rand-type=STRING random numbers distribution {uniform,gaussian,special,pareto} [special]

--rand-spec-iter=N number of iterations used for numbers generation [12]

--rand-spec-pct=N percentage of values to be treated as 'special' (for special distribution) [1]

--rand-spec-res=N percentage of 'special' values to use (for special distribution) [75]

--rand-seed=N seed for random number generator. When 0, the current time is used as a RNG seed. [0]

--rand-pareto-h=N parameter h for pareto distibution [0.2]

Log options:

--verbosity=N verbosity level {5 - debug, 0 - only critical messages} [3]

--percentile=N percentile to calculate in latency statistics (1-100). Use the special value of 0 to disable percentile calculations [95]

--histogram[=on|off] print latency histogram in report [off]

General database options:

--db-driver=STRING specifies database driver to use ('help' to get list of available drivers)

--db-ps-mode=STRING prepared statements usage mode {auto, disable} [auto]

--db-debug[=on|off] print database-specific debug information [off]

Compiled-in database drivers:

mysql - MySQL driver

mysql options:

--mysql-host=[LIST,...] MySQL server host [localhost]

--mysql-port=[LIST,...] MySQL server port [3306]

--mysql-socket=[LIST,...] MySQL socket

--mysql-user=STRING MySQL user [sbtest]

--mysql-password=STRING MySQL password []

--mysql-db=STRING MySQL database name [sbtest]

--mysql-ssl[=on|off] use SSL connections, if available in the client library [off]

--mysql-ssl-cipher=STRING use specific cipher for SSL connections []

--mysql-compression[=on|off] use compression, if available in the client library [off]

--mysql-debug[=on|off] trace all client library calls [off]

--mysql-ignore-errors=[LIST,...] list of errors to ignore, or "all" [1213,1020,1205]

--mysql-dry-run[=on|off] Dry run, pretend that all MySQL client API calls are successful without executing them [off]

Compiled-in tests:

fileio - File I/O test

cpu - CPU performance test

memory - Memory functions speed test

threads - Threads subsystem performance test

mutex - Mutex performance test

See 'sysbench <testname> help' for a list of options for each test.

[root@zhumh ~]# sysbench fileio help

sysbench 1.0.2 (using bundled LuaJIT 2.1.0-beta2)

fileio options:

--file-num=N number of files to create [128]

--file-block-size=N block size to use in all IO operations [16384]

--file-total-size=SIZE total size of files to create [2G]

--file-test-mode=STRING test mode {seqwr, seqrewr, seqrd, rndrd, rndwr, rndrw}

--file-io-mode=STRING file operations mode {sync,async,mmap} [sync]

--file-async-backlog=N number of asynchronous operatons to queue per thread [128]

--file-extra-flags=STRING additional flags to use on opening files {sync,dsync,direct} []

--file-fsync-freq=N do fsync() after this number of requests (0 - don't use fsync()) [100]

--file-fsync-all[=on|off] do fsync() after each write operation [off]

--file-fsync-end[=on|off] do fsync() at the end of test [on]

--file-fsync-mode=STRING which method to use for synchronization {fsync, fdatasync} [fsync]

--file-merged-requests=N merge at most this number of IO requests if possible (0 - don't merge) [0]

--file-rw-ratio=N reads/writes ratio for combined test [1.5]

[root@zhumh ~]# sysbench memory help

sysbench 1.0.2 (using bundled LuaJIT 2.1.0-beta2)

memory options:

--memory-block-size=SIZE size of memory block for test [1K]

--memory-total-size=SIZE total size of data to transfer [100G]

--memory-scope=STRING memory access scope {global,local} [global]

--memory-hugetlb[=on|off] allocate memory from HugeTLB pool [off]

--memory-oper=STRING type of memory operations {read, write, none} [write]

--memory-access-mode=STRING memory access mode {seq,rnd} [seq]

[root@zhumh ~]# sysbench threads help

sysbench 1.0.2 (using bundled LuaJIT 2.1.0-beta2)

threads options:

--thread-yields=N number of yields to do per request [1000]

--thread-locks=N number of locks per thread [8]

[root@zhumh ~]# sysbench mutex help

sysbench 1.0.2 (using bundled LuaJIT 2.1.0-beta2)

mutex options:

--mutex-num=N total size of mutex array [4096]

--mutex-locks=N number of mutex locks to do per thread [50000]

--mutex-loops=N number of empty loops to do inside mutex lock [10000]

[root@zhumh ~]# sysbench cpu help

sysbench 1.0.2 (using bundled LuaJIT 2.1.0-beta2)

cpu options:

--cpu-max-prime=N upper limit for primes generator [10000]

4 使用方法

4.1 命令格式

sysbench [options]... [testname] [command]

4.2 Command

Commands implemented by most tests: prepare run cleanup help

   prepare            --生成测试需要的数据
    run                --进行性能测试
    cleanup            --清除测试数据

4.3 Testname

包括两种:内建脚本和lua脚本

内建脚本如下:

fileio - File I/O test

cpu - CPU performance test

memory - Memory functions speed test

threads - Threads subsystem performance test

mutex - Mutex performance test

lua脚本如下:

[root@zhumh ~]# ll /usr/share/sysbench/

total 64

-rwxr-xr-x 1 root root 1452 Feb 17 18:01 bulk_insert.lua

-rw-r--r-- 1 root root 13756 Feb 17 18:01 oltp_common.lua

-rwxr-xr-x 1 root root 1116 Feb 17 18:01 oltp_delete.lua

-rwxr-xr-x 1 root root 1957 Feb 17 18:01 oltp_insert.lua

-rwxr-xr-x 1 root root 1265 Feb 17 18:01 oltp_point_select.lua

-rwxr-xr-x 1 root root 1649 Feb 17 18:01 oltp_read_only.lua

-rwxr-xr-x 1 root root 1824 Feb 17 18:01 oltp_read_write.lua

-rwxr-xr-x 1 root root 1118 Feb 17 18:01 oltp_update_index.lua

-rwxr-xr-x 1 root root 1127 Feb 17 18:01 oltp_update_non_index.lua

-rwxr-xr-x 1 root root 1440 Feb 17 18:01 oltp_write_only.lua

-rwxr-xr-x 1 root root 1919 Feb 17 18:01 select_random_points.lua

-rwxr-xr-x 1 root root 2118 Feb 17 18:01 select_random_ranges.lua

drwxr-xr-x 4 root root 4096 Apr 13 14:04 tests

4.4 Options

4.4.1 全局参数

General options:

--threads=N 指定测试使用多少线程数,默认为1

--events=N 测试执行的总events数量,默认0

--time=N 最大执行时间,单位为秒。默认是10

--forced-shutdown=STRING 超过max-time强制中断, 默认是 off [off]

--thread-stack-size=SIZE 每个线程的堆栈大小, 默认是 64k

--rate=N average transactions rate. 0 for unlimited rate [0]

--report-interval=N 在N秒内输出一次统计数据。默认0禁用

--report-checkpoints=[LIST,...] 转储完全统计信息并在指定时间点复位所有计数器。 参数是逗号分隔值的列表,表示从必须执行报告检查点的测试开始所经过的时间(以秒为单位)。 默认情况下,报告检查点处于关闭状态

--debug[=on|off] 是否显示更多的调试信息, 默认是off

--validate[=on|off] 在可能情况下执行验证检查, 默认是off。

--help[=on|off] 输出 help 信息, 并退出

--version[=on|off] 输出版本信息, 并退出

--config-file=FILENAME 配置文件

--tx-rate=N deprecated alias for --rate [0]

--max-requests=N deprecated alias for --events [0]

--max-time=N deprecated alias for --time [0]

--num-threads=N deprecated alias for --threads [1]

4.4.2 伪随机数

Pseudo-Random Numbers Generator options:

--rand-type=STRING 分布的随机数{uniform(均匀分布),Gaussian(高斯分布),special(空间分布)}。默认是special

--rand-spec-iter=N 产生数的迭代次数。默认是12

--rand-spec-pct=N 值的百分比被视为’special’ (for special distribution)。默认是1

--rand-spec-res=N 'special'的百分比值。默认是75

--rand-seed=N seed for random number generator. When 0, the current time is used as a RNG seed. [0]

--rand-pareto-h=N 参数h用于 pareto 分布[0.2]

4.4.3 日志

Log options:

--verbosity=N 日志级别,默认为3,5=debug,0=只包含重要信息

--percentile=N 表示设定采样比例,默认是 95%,即丢弃5%的长请求,在剩余的95%里取最大值 [95]

--histogram[=on|off] print latency histogram in report [off]

4.4.4 数据库

General database options:

--db-driver=STRING specifies database driver to use ('help' to get list of available drivers)

--db-ps-mode=STRING prepared statements usage mode {auto, disable} [auto]

--db-debug[=on|off] print database-specific debug information [off]

4.4.5 Mysql

Compiled-in database drivers:

mysql - MySQL driver

mysql options:

--mysql-host=[LIST,...] MySQL server host [localhost]

--mysql-port=[LIST,...] MySQL server port [3306]

--mysql-socket=[LIST,...] MySQL socket

--mysql-user=STRING MySQL user [sbtest]

--mysql-password=STRING MySQL password []

--mysql-db=STRING MySQL database name [sbtest]

--mysql-ssl[=on|off] use SSL connections, if available in the client library [off]

--mysql-ssl-cipher=STRING use specific cipher for SSL connections []

--mysql-compression[=on|off] use compression, if available in the client library [off]

--mysql-debug[=on|off] trace all client library calls [off]

--mysql-ignore-errors=[LIST,...] list of errors to ignore, or "all" [1213,1020,1205]

--mysql-dry-run[=on|off] Dry run, pretend that all MySQL client API calls are successful without executing them [off]

4.4.6 fileio

[root@zhumh ~]# sysbench fileio help

sysbench 1.0.2 (using bundled LuaJIT 2.1.0-beta2)

fileio options:

--file-num=N 指定测试生成多少文件[128]

--file-block-size=N --指定测试块的大小(通常测试mysql默认为16k[16384],或8k[8192])[16384]

--file-total-size=SIZE --指定测试生成总文件大小(file-total-size/file-num=文件个数)[2G]

--file-test-mode=STRING --指定测试磁盘IO的模式

seqwr --顺序写

seqrewr --顺序读写

seqrd --顺序读

rndrd --随机读

rndwr --随机写

rndrw --随机读写

--file-io-mode=STRING 文件操作模式{sync(同步),async(异步),fastmmap(快速map映射),slowmmap(慢map映射)}。默认是sync

--file-async-backlog=N 对应每个线程队列的异步操作数,默认为128。

--file-extra-flags=STRING 使用额外的标志来打开文件(sync,dsync,direct),mysql通常用direct方式

--file-fsync-freq=N --执行fsync()的频率,默认为100,0为不使用 (0 - don't use fsync()) [100]

--file-fsync-all[=on|off] do fsync()--每次执行完一次写操作就执行一次fsync(),默认为off

--file-fsync-end[=on|off] --在测试结束时才执行fsync。默认是on

--file-fsync-mode=STRING 用什么样的模式来同步文件fsync, fdatasync (see above) fsync

--file-merged-requests=N --如果可以,合并最多的IO请求数(0 – 表示不合并)。默认是0

--file-rw-ratio=N --测试时的读写比例。默认是1.5

生成测试用的数据文件,要求生成的数据文件至少要比内存大,否则数据由于被操作系统缓存而无法体现 I/O 密集型工作负载。

4.4.7 cpu

[root@zhumh ~]# sysbench cpu help

sysbench 1.0.2 (using bundled LuaJIT 2.1.0-beta2)

cpu options:

--cpu-max-prime=N upper limit for primes generator [10000]

cpu 测试为测试计算素数直到某个最大值所需的时间。–cpu-max-prime指定这个最大素数值
sysben测试cpu时,为什么采用素数加法运算?
在这种模式下每个请求在于计算素数——cpu-max-primes选项指定一个值。所有的计算执行使用64位的整数。

4.4.8 memory

[root@zhumh ~]# sysbench memory help

sysbench 1.0.2 (using bundled LuaJIT 2.1.0-beta2)

memory options:

–memory-block-size=SIZE 测试内存块的大小,默认为1K
–memory-total-size=SIZE 数据传输的总大小,默认为100G
–memory-scope=STRING 内存访问的范围,包括全局和本地范围,默认为global
–memory-hugetlb=[on|off] 是否从HugeTLB池分配内存的开关,默认为off
–memory-oper=STRING 内存操作的类型,包括read, write, none,默认为write
–memory-access-mode=STRING 内存访问模式,包括seq,rnd两种模式,默认为seq

4.4.9 threads

[root@zhumh ~]# sysbench threads help

sysbench 1.0.2 (using bundled LuaJIT 2.1.0-beta2)

threads options:

1. --thread-yields=N number of yields to do per request [1000] 每个请求产生多少个线程,默认[1000]

2. --thread-locks=N number of locks per thread [8]    每个线程的锁数量,默认 [8]

线程调度:线程并发执行,循环响应信号量花费的时间{越少越好}
测试线程调度器的性能。对于高负载情况下测试线程调度器的行为非常有用

4.4.10 mutex

[root@zhumh ~]# sysbench mutex help

sysbench 1.0.2 (using bundled LuaJIT 2.1.0-beta2)

mutex options:

1. --mutex-num=N total size of mutex array [4096] 数组互斥总大小,默认[4096]

2. --mutex-locks=N number of mutex locks to do per thread [50000] 每个线程互斥锁的数量,默认 [50000]

3. --mutex-loops=N number of empty loops to do inside mutex lock [10000] 内部互斥锁的空循环数量,默认 [10000

互斥锁:并发线程同时申请互斥锁循环一定次数花费的时间{越少越好}

测试互斥锁的性能,方式是模拟所有线程在同一时刻并发运行,并都短暂请求互斥锁

4.4.11 OLTP

[root@zhumh ~]# sysbench /usr/share/sysbench/oltp_common.lua help

sysbench 1.0.2 (using bundled LuaJIT 2.1.0-beta2)

oltp_common.lua options:

--distinct_ranges=N Number of SELECT DISTINCT queries per transaction [1]

--sum_ranges=N Number of SELECT SUM() queries per transaction [1]

--skip_trx[=on|off] Don't start explicit transactions and execute all queries as in the AUTOCOMMIT mode [off]

--secondary[=on|off] Use a secondary index in place of the PRIMARY KEY [off]

--create_secondary[=on|off] Create a secondary index in addition to the PRIMARY KEY [on]

--index_updates=N Number of UPDATE index queries per transaction [1]

--range_size=N Range size for range SELECT queries [100]

--auto_inc[=on|off] Use AUTO_INCREMENT column as Primary Key (for MySQL), or its alternatives in other DBMS. When disabled, use client-generated IDs [on]

--delete_inserts=N Number of DELETE/INSERT combination per transaction [1]

--tables=N Number of tables [1]

--mysql_storage_engine=STRING Storage engine, if MySQL is used [innodb]

--non_index_updates=N Number of UPDATE non-index queries per transaction [1]

--table_size=N Number of rows per table [10000]

--pgsql_variant=STRING Use this PostgreSQL variant when running with the PostgreSQL driver. The only currently supported variant is 'redshift'. When enabled, create_secondary is automatically disabled, and delete_inserts is set to 0

--simple_ranges=N Number of simple range SELECT queries per transaction [1]

--order_ranges=N Number of SELECT ORDER BY queries per transaction [1]

--range_selects[=on|off] Enable/disable all range SELECT queries [on]

--point_selects=N Number of point SELECT queries per transaction [10]

5 测试样例

5.1 Mysql

5.1.1 准备

创建sbtest数据库

Create database sbtest;

5.1.2 测试脚本

sysbench --threads=10 --tables=10 --table-size=100000 --rand-type=uniform --report-interval=1 --time=60 --mysql-user=root --mysql-password=root --mysql-socket=/data/mysql/db_zhumh/mysql.sock /usr/share/sysbench/oltp_read_write.lua prepare

sysbench --threads=10 --tables=10 --table-size=100000 --rand-type=uniform --report-interval=1 --time=60 --mysql-user=root --mysql-password=root --mysql-socket=/data/mysql/db_zhumh/mysql.sock /usr/share/sysbench/oltp_read_write.lua run

5.2 IO

--创建10G的文件,分成4个,测试16K块大小,使用direct方式读,测试600秒(10分钟),启用64个线程,每3秒输出一次结果

#sysbench --file-num=4 --file-block-size=16384 --file-total-size=10G --file-test-mode=rndrd --file-extra-flags=direct --max-requests=0 --max-time=600 --num-threads=64 --report-interval=3 fileio prepare

#sysbench --file-num=4 --file-block-size=16384 --file-total-size=10G --file-test-mode=rndrd --file-extra-flags=direct --max-requests=0 --max-time=600 --num-threads=64 --report-interval=3 fileio run

#sysbench --file-num=4 --file-block-size=16384 --file-total-size=10G --file-test-mode=rndrd --file-extra-flags=direct --max-requests=0 --max-time=600 --num-threads=64 --report-interval=3 fileio cleanup

磁盘:S3610 * 6 raid10, 内存128G

测试出相关场景下的极限IOPS

随机读写(3:2 oltp场景)

sysbench --num-threads=16 --report-interval=3 --max-requests=0 --max-time=300 --test=fileio --file-num=200 --file-total-size=200G --file-test-mode=rndrw --file-block-size=16384 --file-extra-flags=direct run

fileio_oltp_32

随机读写(5:1 oltp场景)

sysbench --num-threads=16 --report-interval=3 --max-requests=0 --max-time=300 --test=fileio --file-num=200 --file-total-size=200G --file-test-mode=rndrw --file-block-size=16384 --file-extra-flags=direct --file-rw-ratio=5 run

fileio_oltp_51

随机写

sysbench --num-threads=16 --report-interval=3 --max-requests=0 --max-time=300 --test=fileio --file-num=200 --file-total-size=200G --file-test-mode=rndwr --file-block-size=16384 --file-extra-flags=direct run

fileio_rndwr

随机读

sysbench --num-threads=16 --report-interval=3 --max-requests=0 --max-time=300 --test=fileio --file-num=200 --file-total-size=200G --file-test-mode=rndrd --file-block-size=16384 --file-extra-flags=direct run

6 Tpcc

6.1 Option

[root@localhost sysbench]# sysbench /usr/share/sysbench/tpcc.lua help

sysbench 1.1.0 (using bundled LuaJIT 2.1.0-beta3)

tpcc.lua options:

--enable_purge=STRING Use purge transaction (yes, no) [no]

--force_pk=N Force using auto-inc PK on history table [0]

--mysql_storage_engine=STRING Storage engine, if MySQL is used [innodb]

--mysql_table_options=STRING Extra table options, if MySQL is used. e.g. 'COLLATE latin1_bin' []

--report_csv=STRING Report output in csv (yes, no) [no]

--scale=N Scale factor (warehouses) [100]

--tables=N Number of tables [1]

--trx_level=STRING Transaction isolation level (RC, RR or SER) [RR]

--use_fk=N Use foreign keys [1]

6.2 测试脚本

./tpcc.lua --mysql-socket=/mysqldb/db_master/mysql.sock --mysql-user=root --mysql-password=zabbix --mysql-db=sbt --time=30 --threads=64 --report-interval=1 --tables=10 --scale=10 --db-driver=mysql prepare

./tpcc.lua --mysql-socket=/mysqldb/db_master/mysql.sock --mysql-user=root --mysql-password=zabbix --mysql-db=sbt --time=30 --threads=64 --report-interval=1 --tables=10 --scale=10 --db-driver=mysql run

./tpcc.lua --mysql-socket=/mysqldb/db_master/mysql.sock --mysql-user=root --mysql-password=zabbix --mysql-db=sbt --time=30 --threads=64 --report-interval=1 --tables=10 --scale=10 --db-driver=mysql cleanup

猜你喜欢

转载自blog.51cto.com/14136767/2334484