《高性能MySQL》读书笔记2-- sysbench安装

阅读《高性能MySQL》第二章时,作者列举了几种基准测试工具。这些测试工具,相当惭愧,我都没怎么用到。因此根据书中作者的建议,就下载了 sysbench 进行学习。

现在分享下安装的过程:

1.系统介绍

目前安装的系统是 Centos7 以下皆以此为背景。

2.下载文件

git 地址 https://github.com/akopytov/sysbench
命令 git clone https://github.com/akopytov/sysbench.git sysbench

3.安装一些依赖文件

yum -y install make automake libtool pkgconfig libaio-devel
yum -y install mariadb-devel

4.编译

cd sysbench
./autogen.sh
./configure

如果 MySQL 并不是安装在标准目录 /usr/local/bin/ 下的话,那么就需要自己指定 MySQL 的路径了

./configure --with-mysql-includes=/usr/local/mysql-5.7.17/include --with-mysql-libs=/usr/local/mysql-5.7.17/lib

make -j
make install

添加环境变量

vim /etc/profile
export LD_LIBRARY_PATH=/usr/local/mysql/lib
source /etc/profile

验证安装是否正确:

sysbench --version
在这里插入图片描述

5. yum安装

sudo yum -y install sysbench

6.报错提示

1.sysbench: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory
解决:

vim /etc/profile
export LD_LIBRARY_PATH=/usr/local/mysql/lib
source /etc/profile

7.主要指令

sysbench --help

Usage:
  sysbench [options]... [testname] [command]

Commands implemented by most tests: prepare run cleanup help
*command部分有4类:prepare run cleanup和help:
    prepare:准备数据的命令。例如,在sysbench压力测试之前,需要先准备好测试库、测试表以及测试表中的数据。
    run:表示进行压力测试。
    cleanup:清除测试时产生的数据。
    help:输出给定lua脚本的帮助信息。

General options: //普通功能
  --threads=N                      指定线程数 [1]
  --events=N                       事件总数的限制 [0]
  --time=N                           限制总执行时间(以秒为单位)[10]
  --warmup-time=N             在启用统计信息运行实际基准测试之前,在禁用统计信息的情况下执行事件这么长时间 [0]
  --forced-shutdown=STRING       强制关闭或禁用“off”之前,在—时间限制之后等待的秒数 [off]
  --thread-stack-size=SIZE        每个线程的堆栈大小 [64K]
  --thread-init-timeout=N         等待工作线程初始化的时间(以秒为单位) [30]
  --rate=N                        		平均事务率。0表示不限制[0]
  --report-interval=N             以秒为单位定期报告中间统计信息。0禁用间隔报告 [0]
  --report-checkpoints=[LIST,...] 转储完整的统计信息,并在指定的时间点重置所有计数器。参数是一个逗号分隔的值列表,表示从测试开始到必须执行报表检查点所花费的时间(以秒为单位)。默认情况下,报表检查点是关闭的。 []
  --debug[=on|off]                打印更多调试信息 [off]
  --validate[=on|off]              在可能的情况下执行验证检查[off]
  --help[=on|off]                    打印帮助并退出 [off]
  --version[=on|off]                打印版本并退出[off]
  --config-file=FILENAME      包含命令行选项的文件
  --luajit-cmd=STRING           执行LuaJIT控制命令。这个选项相当于“luajit -j”。有关更多信息,请参见LuaJIT文档

Pseudo-Random Numbers Generator options: //伪随机数生成器选项
  --rand-type=STRING   随机数分布{均匀,高斯,special,帕累托,zipfian}默认使用 [special]
  --rand-seed=N             种子为随机数发生器。当为0时,将当前时间用作RNG种子。 [0]
  --rand-spec-iter=N      特殊分布的迭代次数[12]
  --rand-spec-pct=N     “特殊”值落在特殊分布中的整个范围的百分比[1]
  --rand-spec-res=N    	用于特殊分布的“特殊”值的百分比 [75]
  --rand-pareto-h=N     形状参数为帕累托分布[0.2]
  --rand-zipfian-exp=N Zipfian分布的形状 参数 (exponent, theta)  [0.8]

Log options:  //日志选项
  --verbosity=N verbosity level {5 - debug, 0 - only critical messages}  [3] 冗长级别{5 -调试,0 -只有关键消息}

  --percentile=N       在延迟统计中计算的百分位数(1-100)。使用0的特殊值禁用百分位数计算 [95]
  --histogram[=on|off] 在报表中打印延迟直方图 [off]

General database options: //一般数据库选项

  --db-driver=STRING  指定要使用的数据库驱动程序(“帮助”获取可用驱动程序列表) [mysql]
  --db-ps-mode=STRING 语句使用模式 {auto, disable} [auto]
  --db-debug[=on|off] 打印特定于数据库的调试信息 [off]


Compiled-in database drivers:  //对数据库驱动程序
  mysql - MySQL driver

mysql options:
  --mysql-host=[LIST,...]          MySQL服务器主机[localhost]
  --mysql-port=[LIST,...]          MySQL服务器端口 [3306]
  --mysql-socket=[LIST,...]        MySQL socket
  --mysql-user=STRING              MySQL 用户[sbtest]
  --mysql-password=STRING          MySQL 密码[]
  --mysql-db=STRING                MySQL 数据库名称 [sbtest]
  --mysql-ssl=STRING               SSL模式。这接受与MySQL客户机实用程序中的——ssl-mode选项相同的值。默认情况下禁用 [disabled]
  --mysql-ssl-key=STRING           客户端私钥文件的路径名称
  --mysql-ssl-ca=STRING            CA文件的路径名
  --mysql-ssl-cert=STRING          客户端公钥证书文件的路径名
  --mysql-ssl-cipher=STRING        为SSL连接使用特定的密码 []
  --mysql-compression[=on|off]     如果在客户端库中可用,则使用压缩 [off]
  --mysql-debug[=on|off]           跟踪所有客户机库调用 [off]
  --mysql-ignore-errors=[LIST,...] 要忽略的错误列表,或“全部” [1213,1020,1205]
  --mysql-dry-run[=on|off]         试运行,假设所有MySQL客户端API调用都是成功的,而没有执行它们 [off]

Compiled-in tests: //编译测试
  fileio - 文件 I/O 测试
  cpu - CPU性能测试
  memory - 缓存功能速度测试
  threads - 线程子系统性能测试
  mutex - 互斥锁的性能测试
8.简单使用

1、使用自带的测试模块,如对cpu,I/O,memory等的测试。
2、使用自带的lua脚本进行测试,如果使用快速安装的方式,默认的脚本路径为:/usr/share/sysbench
3、使用自定义的lua脚本。

1.CPU测试:
sysbench cpu --cpu-max-prime=2000 run

--cpu-max-prime=N 质数发生器的上限 [10000]

《高性能MySQL》读书笔记2-- sysbench安装_第1张图片

注:使用  sysbench 1.1.0-faaff4f    sysbench --test=cpu --cpu-max-prime=2000 run 
会出现报错
FATAL: Cannot find benchmark 'run': no such built-in test, file or module  
网上又是一堆这种教程,没有关于这种报错的记录,请路过知道的大神解惑,感谢!

在这里插入图片描述2.线程测试:
sysbench threads --threads=64 --thread-yields=100 --thread-locks=2 run

--thread-yields=N 每个请求要执行的收益率数 [1000]
--thread-locks=N  每个线程的锁数[8]

·《高性能MySQL》读书笔记2-- sysbench安装_第2张图片3.磁盘IO性能测试:

fileio options:
 --file-num=N                 代表生成测试文件的数量 [128]
 --file-block-size=N           在所有IO操作中使用的块大小 [16384]
 --file-total-size=SIZE        要创建的文件的总大小 [2G]
 --file-test-mode=STRING       测试模式 {seqwr, seqrewr, seqrd, rndrd, rndwr, rndrw}
 --file-io-mode=STRING         文件操作模式 {sync,async,mmap} [sync]
 --file-async-backlog=N        每个线程要排队的异步操作数 [128]
 --file-extra-flags=[LIST,...] 用于打开文件的附加标志列表 {sync,dsync,direct} []
 --file-fsync-freq=N           执行fsync()函数的频率。fsync主要是同步磁盘文件,因为可能有系统和磁盘缓冲的关系。 0代表不使用fsync函数。默认值为100。
 --file-fsync-all[=on|off]     每执行完一次写操作,就执行一次fsync。默认为off。
 --file-fsync-end[=on|off]     在测试结束时执行fsync函数。默认为on。
 --file-fsync-mode=STRING      文件同步函数的选择,同样是和API相关的参数,由于多个操作系统对于fdatasync支持不同,因此不建议使用fdatasync。默认为fsync。
 --file-merged-requests=N      大多情况下,合并可能的IO的请求数,默认为0。
 --file-rw-ratio=N             测试时的读写比例,默认时为1.5,即可3:2。

sysbench fileio --threads=16 --file-total-size=1G --file-test-mode=rndrw prepare //准备
sysbench fileio --threads=16 --file-total-size=1G --file-test-mode=rndrw run //运行
sysbench fileio --threads=16 --file-total-size=1G --file-test-mode=rndrw cleanup //清理

上述参数指定了最大创建16个线程,创建的文件总大小为1G,文件读写模式为随机读。
《高性能MySQL》读书笔记2-- sysbench安装_第3张图片4.内存测试:
sysbench memory --memory-block-size=8k --memory-total-size=1G run
本次测试整个过程是在内存中传输 1G 的数据量,每个 block 大小为 8K

  --memory-block-size=SIZE      测试内存块的大小 [1K]
  --memory-total-size=SIZE    	 要传输的数据的总大小100G]
  --memory-scope=STRING       内存访问范围 {global,local} [global]
  --memory-hugetlb[=on|off]   	 从内存池中分配内存[off]
  --memory-oper=STRING        存储操作类型 {read, write, none} [write]
  --memory-access-mode=STRING 存储器存取方式 {seq,rnd} [seq]

《高性能MySQL》读书笔记2-- sysbench安装_第4张图片5.数据库性能(OLTP测试):
之前有内建的–test=oltp方法,现在改成了外部的lua脚本形式
1.在数据库创建 sbtest 库
2.准备

sysbench 
   --mysql-host=127.0.0.1 \
   --mysql-port=3306 \
   --mysql-user=root \
   --mysql-password=P@ssword1! \
   自己的oltp_common.lua路径 \
   --tables=10 \
   --table_size=100 \
   prepare

tables:设定10张表
table_size:每张表100条数据

3.开始测试

sysbench 
--mysql-host=127.0.0.1  --mysql-port=3306 --mysql-user=root  --mysql-password=P@ssword1! \
自己的oltp_read_write.lua \
 --threads=8 \
--report-interval=10 --rand-type=uniform --time=120 \
--events=0 --percentile=99 \
 run >> ./log/sysbench_oltp_20190422.log

time:时间
threads:并发数为8
events:表示总请求数为 0
report-interval: 表示每10秒输出一次测试进度报告
percentile:表示设定采样比例,默认是 95%,即丢弃1%的长请求,在剩余的99%里取最大值

结果示例:

sysbench 1.1.0-faaff4f (using bundled LuaJIT 2.1.0-beta3)

Running the test with following options:
Number of threads: 8                          #并发数8
Report intermediate results every 10 second(s) # 每10秒钟报告一次测试结果
Initializing random number generator from current time


Initializing worker threads...

Threads started!
#thds 线程数
#每秒传输的事物处理个数,即服务器每秒处理的事务数
#一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,即每秒的响应请求数,也即是最大吞吐能力
#r/w/o:每秒读、每秒写、其余
#lat 99%以上的响应时长统
#err 错误数

[ 10s ] thds: 8 tps: 72.05 qps: 1505.41 (r/w/o: 1059.71/80.55/365.16) lat (ms,99%): 390.30 err/s: 3.00 reconn/s: 0.00
[ 20s ] thds: 8 tps: 78.72 qps: 1576.51 (r/w/o: 1103.22/105.62/367.67) lat (ms,99%): 344.08 err/s: 0.20 reconn/s: 0.00
[ 30s ] thds: 8 tps: 77.80 qps: 1553.04 (r/w/o: 1087.06/118.40/347.59) lat (ms,99%): 458.96 err/s: 0.00 reconn/s: 0.00
[ 40s ] thds: 8 tps: 57.00 qps: 1149.08 (r/w/o: 803.89/98.30/246.90) lat (ms,99%): 549.52 err/s: 0.00 reconn/s: 0.00
[ 50s ] thds: 8 tps: 52.09 qps: 1041.88 (r/w/o: 729.32/96.09/216.48) lat (ms,99%): 816.63 err/s: 0.00 reconn/s: 0.00
[ 60s ] thds: 8 tps: 50.11 qps: 991.41 (r/w/o: 693.78/94.71/202.92) lat (ms,99%): 746.32 err/s: 0.10 reconn/s: 0.00
[ 70s ] thds: 8 tps: 67.80 qps: 1365.35 (r/w/o: 957.93/143.01/264.41) lat (ms,99%): 530.08 err/s: 0.00 reconn/s: 0.00
[ 80s ] thds: 8 tps: 65.70 qps: 1313.30 (r/w/o: 919.30/145.00/249.00) lat (ms,99%): 475.79 err/s: 0.00 reconn/s: 0.00
[ 90s ] thds: 8 tps: 63.69 qps: 1274.95 (r/w/o: 891.60/149.48/233.87) lat (ms,99%): 520.62 err/s: 0.00 reconn/s: 0.00
[ 100s ] thds: 8 tps: 69.61 qps: 1388.73 (r/w/o: 971.79/162.22/254.72) lat (ms,99%): 314.45 err/s: 0.00 reconn/s: 0.00
[ 110s ] thds: 8 tps: 75.90 qps: 1518.91 (r/w/o: 1063.31/189.50/266.10) lat (ms,99%): 287.38 err/s: 0.00 reconn/s: 0.00
[ 120s ] thds: 8 tps: 63.50 qps: 1276.50 (r/w/o: 893.33/165.29/217.88) lat (ms,99%): 484.44 err/s: 0.10 reconn/s: 0.00

SQL statistics:

    queries performed:      #执行的查询
        read:                            111748     # 读总数
        write:                           15482      # 写总数
        other:                           32337      #其他操作总数(SELECT、INSERT、UPDATE、DELETE之外的操作,例如COMMIT等)

        total:                           159567                         #全部总数
    transactions:                        7948   (66.14 per sec.)        #总事务数(每秒事务数)
    queries:                             159567 (1327.85 per sec.)      #查询总数
    ignored errors:                      34     (0.28 per sec.)         #忽略错误数
    reconnects:                          0      (0.00 per sec.)         #重新连接数 

Throughput:         #吞吐量
    events/s (eps):                      66.1398        #每秒事件数
    time elapsed:                        120.1697s      #花费时间
    total number of events:              7948           #总事件数

Latency (ms):       #等待时间
         min:                                   20.38   #最小耗时
         avg:                                  120.92   #平均耗时
         max:                                  876.60   #最长耗时
         99th percentile:                      549.52   #超过99%平均耗时
         sum:                               961039.39   #总时间

Threads fairness:       #并发统计
    events (avg/stddev):           993.5000/10.62   #总处理事件数/标准偏差
    execution time (avg/stddev):   120.1299/0.01    #平均处理事件时间/标准偏差

清除测试数据:

sysbench 
--mysql-host=127.0.0.1  --mysql-port=3306 --mysql-user=root  --mysql-password=P@ssword1!  \
 自己的oltp_read_write.lua \
  --tables=10  \
  cleanup

你可能感兴趣的:(mysql,mysql)