今天就跟大家聊聊有关怎样进行mysql sysbench1.0.3 安装以及系统压力测试,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
针对系统和数据库压测是项目上线前必做的一项,这里使用的是最新版本的sysbench做的压测使用详解。sysbench可以做系统层面的压力测试(CPU、内存、硬盘IO、互斥锁、Thead),也可以做数据库(MySQL/Oracle/PG)层面的压力测试。安装容易,操作便捷,是压测使用的重要工具之一。
一、sysbench下载
项目地址:https://launchpad.net/sysbench
下载地址:https://github.com/akopytov/sysbench/archive/1.0.3.tar.gz
二、sysbench安装
[root@DB_TEST tools]# tar -xzvf sysbench-1.0.3.tar.gz
[root@DB_TEST tools]# cd sysbench-1.0.3
[root@DB_TEST sysbench-1.0.3]# ./autogen.sh
[root@DB_TEST sysbench-1.0.3]#./configure –prefix=/usr/local/sysbench –with-mysql
[root@DB_TEST sysbench-1.0.3]# make
[root@DB_TEST sysbench-1.0.3]# make install
[root@DB_TEST sysbench-1.0.3]# cp -rp /usr/local/sysbench/bin/sysbench /usr/bin/
[root@DB_TEST sysbench-1.0.3]# /usr/local/sysbench/bin/sysbench –help
点击(此处)折叠或打开
-
[root@BJ-133-22 sysbench-1.0.3]# /usr/local/sysbench/bin/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 help' for a list of options for each test.
三、sysbench使用
1、CPU性能测试
cpu性能测试:找范围内最大素数{时间越短越好}
cpu性能测试主要是根据素数的加法运算,这里指定最大素数(质数)为80000,–num-threads=`grep "processor" /proc/cpuinfo | wc -l`指定线程数,默认是1
/usr/local/sysbench/bin/sysbench –test=cpu –cpu-max-prime=80000 run
点击(此处)折叠或打开
-
[root@db_test ~]# /usr/local/sysbench/bin/sysbench –test=cpu –cpu-max-prime=80000 run
-
WARNING: the –test option is deprecated. You can pass a script name or path on the command line without any options.
-
sysbench 1.0.3 (using bundled LuaJIT 2.1.0-beta2)
-
Running the test with following options:
-
Number of threads: 1
-
Initializing random number generator from current time
-
Prime numbers limit: 80000
-
Initializing worker threads…
-
Threads started!
-
General statistics:
-
total time: 10.0057s
-
total number of events: 520
-
Latency (ms):
-
min: 18.74
-
avg: 19.24
-
max: 19.39
-
95th percentile: 19.29
-
sum: 10005.32
-
Threads fairness:
-
events (avg/stddev): 520.0000/0.00
-
execution time (avg/stddev): 10.0053/0.00
实际环境CPU拷机压测脚本如下:
echo -e "进行CPU压力测试: 寻找小于1千万的最大质数,并发线程数10,最大请求数100 "
/usr/local/bin/sysbench –num-threads=10 –max-requests=100 –test=cpu –debug –cpu-max-prime=10000000 run
2、内存性能测试
sysbench 测试memory的时候是顺序读或写内存的。根据选项的不同,每次操作过程中,每个线程可以获取global或本地的数据块
内存:以不同块大小传输一定数量的数据吞吐量大小{越大越好}
点击(此处)折叠或打开
-
[root@db_test fileio]# /usr/local/sysbench/bin/sysbench –test=memory help
-
WARNING: the –test option is deprecated. You can pass a script name or path on the command line without any options.
-
sysbench 1..3 (using bundled LuaJIT 2.1.-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] 从<span "="" style="color: rgb(0, 0, 0); font-size: 10.5pt;"> HugeTLB pool内存分配
-
–memory-oper=STRING type of memory operations {read, write, none} [write] 内存操作类型
-
–memory-access-mode=STRING memory access mode {seq,rnd} [seq] 存储器存取方式
示例:测试传输数据总量为5G,每个块大小是1K(一般设置是8K),连续读写的情况下,吞吐量3435.87 MiB/sec
[root@db_test fileio]# /usr/local/sysbench/bin/sysbench –test=memory –memory-block-size=1K –memory-total-size=5G run
WARNING: the –test option is deprecated. You can pass a script name or path on the command line without any options.
sysbench 1.0.3 (using bundled LuaJIT 2.1.0-beta2)
Running the test with following options:
Number of threads: 1
Initializing random number generator from current timeInitializing worker threads…
Threads started!
Operations performed: 5242880 (3518332.06 ops/sec)
5120.00 MiB transferred (3435.87 MiB/sec)General statistics:
total time: 1.4883s
total number of events: 5242880
Latency (ms):
min: 0.00
avg: 0.00
max: 0.03
95th percentile: 0.00
sum: 631.01
Threads fairness:
events (avg/stddev): 5242880.0000/0.00
execution time (avg/stddev): 0.6310/0.00
实际内存压力测试脚本:
echo -e "进行内存压力测试: 测试范围32G,并发线程数10,最大请求数100, 读 "
/usr/local/bin/sysbench –num-threads=10 –max-requests=100 –test=memory –memory-block-size=8K –memory-total-size=${MEM}G –memory-oper=read run
echo -e "进行内存压力测试: 测试范围32G,并发线程数10,最大请求数100, 写 "
/usr/local/bin/sysbench –num-threads=10 –max-requests=100 –test=memory –memory-block-size=8K –memory-total-size=${MEM}G –memory-oper=write run
3、磁盘IO性能测试
IO性能测试:不同场景下IOPS{越大越好}
点击(此处)折叠或打开
-
[root@db_test sysbench-1.0.3]# /usr/local/sysbench/bin/sysbench –test=fileio help
-
WARNING: the –test option is deprecated. You can pass a script name or path on the command line without any options.
-
sysbench 1.0.3 (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]
–file-num=N 创建测试文件数量,默认是 [128]
–file-block-size=N 测试时文件块大小,默认是[16384],即16K
–file-total-size=SIZE 测试文件的总大小,默认是 [2G]
–file-test-mode=STRING 测试模式 {seqwr(顺序写), seqrewr(顺序读写), seqrd(顺序读), rndrd(随机读), rndwr(随机写), rndrw(随机读写)}
–file-io-mode=STRING 文件操作模式{sync,async,mmap} [sync]
–file-extra-flags=STRING 使用额外的标志打开文件 {sync,dsync,direct} []
–file-fsync-freq=N 执行fsync()频率,0表示不使用,默认100
–file-fsync-all=[on|off] 每执行一次写操作执行一次fsync(),默认 [off]
–file-fsync-end=[on|off] 测试结束执行fsync(),默认 [on]
–file-fsync-mode=STRING 同步方法 {fsync, fdatasync} [fsync]
–file-merged-requests=N 如果可以,则合并IO请求数,默认0表示不合并
–file-rw-ratio=N 测试读写比例,默认[1.5]
seqwr 顺序写入
seqrewr 顺序重写
seqrd 顺序读取
rndrd 随机读取
rndwr 随机写入
rndrw 混合随机读/写
FileIO示例01:prepare 命令创建了128个文件总共大小为10G ,文件读写模式为随机读写混合方式。run 命令则进行测试,并返回结果,cleanup 删除测试产生的文件!
##Fileio准备工作,生成测试数据(最好比内存的2倍大)
[root@db_test fileio]# /usr/local/sysbench/bin/sysbench –num-threads=16 –test=fileio –file-total-size=10G –file-test-mode=rndrw prepare
WARNING: the –test option is deprecated. You can pass a script name or path on the command line without any options.
WARNING: –num-threads is deprecated, use –threads instead
sysbench 1.0.3 (using bundled LuaJIT 2.1.0-beta2)
128 files, 81920Kb each, 10240Mb total
Creating files for the test…
Extra file open flags: 0
Creating file test_file.0
…
Creating file test_file.127
10737418240 bytes written in 9.96 seconds (1027.97 MiB/sec).
##正式执行FileIO测试
[root@db_test fileio]# /usr/local/sysbench/bin/sysbench –num-threads=16 –test=fileio –file-total-size=10G –file-test-mode=rndrw run
WARNING: the –test option is deprecated. You can pass a script name or path on the command line without any options.
WARNING: –num-threads is deprecated, use –threads instead
sysbench 1.0.3 (using bundled LuaJIT 2.1.0-beta2)
Running the test with following options:
Number of threads: 16
Initializing random number generator from current timeExtra file open flags: 0
128 files, 80MiB each
10GiB total file size
Block size 16KiB
Number of IO requests: 0
Read/Write ratio for combined random IO test: 1.50
Periodic FSYNC enabled, calling fsync() each 100 requests.
Calling fsync() at the end of test, Enabled.
Using synchronous I/O mode
Doing random r/w test
Initializing worker threads…
Threads started!File operations:
reads/s: 1449.16
writes/s: 965.91
fsyncs/s: 3083.55
Throughput:
read, MiB/s: 22.64
written, MiB/s: 15.09
General statistics:
total time: 10.4176s
total number of events: 57291
Latency (ms):
min: 0.00
avg: 2.87
max: 825.08
95th percentile: 0.17
sum: 164312.66
Threads fairness:
events (avg/stddev): 3580.6875/469.53
execution time (avg/stddev): 10.2695/0.08
IO密切相关的包括每秒请求数和总吞吐量,其中请求数是(1449.16+965.91+3083.55)/s,吞吐量是(22.64+15.09)MB/s
##清理创建的文件
[root@db_test fileio]# /usr/local/sysbench/bin/sysbench –num-threads=16 –test=fileio –file-total-size=10G –file-test-mode=rndrw cleanup
WARNING: the –test option is deprecated. You can pass a script name or path on the command line without any options.
WARNING: –num-threads is deprecated, use –threads instead
sysbench 1.0.3 (using bundled LuaJIT 2.1.0-beta2)
Removing test files…
实际环境FILEIO压力测试脚本:
echo -e "进行IO压力测试: 20个文件,每个10GB,随机读写 "
/usr/local/bin/sysbench –file-num=20 –num-threads=20 –test=fileio –file-total-size=${HDD}G –max-requests=1000000 –file-test-mode=rndrw prepare
/usr/local/bin/sysbench –file-num=20 –num-threads=20 –test=fileio –file-total-size=${HDD}G –max-requests=1000000 –file-test-mode=rndrw run
/usr/local/bin/sysbench –file-num=20 –num-threads=20 –test=fileio –file-total-size=${HDD}G –max-requests=1000000 –file-test-mode=rndrw cleanup
4、thread测试
线程调度:线程并发执行,循环响应信号量花费的时间{越少越好}
测试线程调度器的性能。对于高负载情况下测试线程调度器的行为非常有用
点击(此处)折叠或打开
-
[root@db_test fileio]# /usr/local/sysbench/bin/sysbench –test=threads help
-
WARNING: the –test option is deprecated. You can pass a script name or path on the command line without any options.
-
sysbench 1.0.3 (using bundled LuaJIT 2.1.0-beta2)
-
threads options:
-
–thread-yields=N number of yields to do per request [1000] 每个请求产生多少个线程,默认[4096]
-
–mutex-locks=N number of mutex locks to do per thread [50000] 每个线程互斥锁的数量,默认 [50000]
-
–mutex-loops=N number of empty loops to do inside mutex lock [10000] 内部互斥锁的空循环数量,默认 [10000]
所有线程同时执行,获取短时间的mutex lock,以便测试mutex的实现!
示例:
[root@db_test fileio]# /usr/local/sysbench/bin/sysbench –test=mutex –mutex-num=4096 –mutex-locks=50000 –mutex-loops=20000 run
WARNING: the –test option is deprecated. You can pass a script name or path on the command line without any options.
sysbench 1.0.3 (using bundled LuaJIT 2.1.0-beta2)
Running the test with following options:
Number of threads: 1
Initializing random number generator from current timeInitializing worker threads…
Threads started!General statistics:
total time: 0.0021s
total number of events: 1
Latency (ms):
min: 2.05
avg: 2.05
max: 2.05
95th percentile: 2.03
sum: 2.05
Threads fairness:
events (avg/stddev): 1.0000/0.00
execution time (avg/stddev): 0.0020/0.00
看完上述内容,你们对怎样进行mysql sysbench1.0.3 安装以及系统压力测试有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。
原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/206392.html