sysbench的安装和做性能测试
sysbench是一个模块化的、跨平台、多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况。关于这个项目的详细介绍请看:sysbench.sourceforge。
它主要包括以下几种方式的测试:
1、cpu性能
2、磁盘io性能
3、调度程序性能
4、内存分配及传输速度
5、POSIX线程性能
6、数据库性能(OLTP基准测试)
目前sysbench主要支持 MySQL,pgsql,oracle 这3种数据库。
一、安装
首先,在 sourceforge/projects/sysbench 下载源码包。
接下来,按照以下步骤安装:
tar zvxf sysbench-0.
cd sysbench-0.5
./configure && make && make install
strip /usr/local/bin/sysbench
以上方法适用于 MySQL 安装在标准默认目录下的情况,如果 MySQL 并不是安装在标准目录下的话,那么就需要自己指定 MySQL 的路径了。比如我的 MySQL 喜欢自己安装在 /opt/mysql 下,则按照以下方法编译:
A.cd  sysbench-0.5
B.运行autogen.sh
./autogen.sh
如果不成功 执行 sh  autogen.sh
./configure --with-mysql-includes=/opt/mysql/include --with-mysql-libs=/opt/mysql/lib && make && make install  (如果提示失败 看看你mysql 路径在什么位置  本次实验为/OPT/mysql)
安装完成马上测试一下:
复制代码 代码如下:
[root@beanvm sysbench-0.5]# sysbench
sysbench: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory
说是缺少libmysqlclient.so.18文件,额,这个文件是存在的,需要手动链接一下:
ln ln -s /opt/mysql/lib/libmysqlclient.so.18 /usr/lib/ (mysql目录是那个  路径就设置为哪个)
当然了,用上面的参数编译的话,就要确保你的 MySQL lib目录下有对应的 so 文件,如果没有,可以自己下载 devel 或者 share 包来安装。
另外,如果想要让 sysbench 支持 pgsql/oracle 的话,就需要在编译的时候加上参数
--with-pgsql
或者
--with-oracle
这2个参数默认是关闭的,只有 MySQL 是默认支持的。
二、开始测试
编译成功之后,就要开始测试各种性能了,测试的方法网站上也提到一些,但涉及到 OLTP 测试的部分却不够准确。在这里我大致提一下:
1、cpu性能测试
sysbench --test=cpu --cpu-max-prime=20000 run
os系统怎么自定义图标cpu测试主要是进行素数的加法运算,在上面的例子中,指定了最大的素数为 20000,自己可以根据机器cpu的性能来适当调整数值。
下面例子:
[root@localhost lib]# sysbench --test=cpu --cpu-max-prime=20000 run
sysbench 0.5:  multi-threaded system evaluation benchmark
Running the test with following options:
Number of threads: 1
Random number generator seed is 0 and will be ignored
Primer numbers limit: 20000
Threads started!
Test execution summary:
tot
al time:                          44.5620s
total number of events:              10000
total time taken by event execution: 44.5572s
per-request statistics:
min:                                  4.17ms
avg:                                  4.46ms
max:                                16.41ms
approx.  95 percentile:              4.92ms
Threads fairness:
events (avg/stddev):          10000.0000/0.00
execution time (avg/stddev):  44.5572/0.00
我们只需要关心测试的总时间(total time)即可。
CPU性能测试有一个需要注意的地方,上面的测试只使用了一个线程,如果在两个cpu processor不同的电脑上做比较,这是不公平的。公平的做法是指定合理的线程数,如下所示:
sysbench --test=cpu --num-threads=`grep "processor" /proc/cpuinfo | wc -l` \
--cpu-max-prime=200000 run
补充知识:
查看CPU核数的方法
查看物理cpu个数
grep "physical id" /proc/cpuinfo | sort -u | wc -l
查看核心数量
grep "core id" /proc/cpuinfo | sort -u | wc -l
mybatis中 和 的区别查看线程数量
grep "processor" /proc/cpuinfo | sort -u | wc -l
# 查看物理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
# 查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep "cpu cores"| uniq
# 查看逻辑CPU的个数
cat /proc/cpuinfo| grep "processor"| wc -l
查看CPU信息(型号)
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
查看内 存信息
# cat /proc/meminfo
在sysbench的测试中,--num-threads取值为"线程数量"即可,再大的值没有什么意义,对测试结果也没有什么影响。
汇编语言jc什么意思
2、线程测试
sysbench --test=threads --num-threads=64 --thread-yields=100 --thread-locks=2 run
下面是输出结果:
[root@localhost lib]# sysbench --test=threads --num-threads=64 run
sysbench 0.5:  multi-threaded system evaluation benchmark
Running the test with following options:
Number of threads: 64
Random number generator seed is 0 and will be ignored
Threads started!
Test execution summary:
total time:                          6.1911s
total number of events:              10000
total time taken by event execution: 394.2028s
per-request statistics:
min:                                  0.73ms
avg:                                39.42ms
max:                                149.35ms
approx.  95 percentile:              90.76ms
Threads fairness:
events (avg/stddev):          156.2500/3.17
execution time (avg/stddev):  6.1594/0.03
可以看到total time 比在我自己电脑上少了一半,服务器的线程调度肯定比普通电脑快多了。
3、磁盘IO性能测试
首先生成需要的测试文件,文件总大小1000M,16个并发线程,随机读写模式。执行完后会在当前目录下生成一堆小文件。
sysbench --test=fileio --num-threads=16 --file-total-size=3G --file-test-mode=rndrw prepare
sysbench --test=fileio --num-threads=16 --file-total-size=3G --file-test-mode=rndrw run
sysbench --test=fileio --num-threads=16 --file-total-size=3G --file-test-mode=rndrw cleanup
sysbench 0.5:  multi-threaded system evaluation benchmark
Running the test with following options:
Number of threads: 16
Random number generator seed is 0 and will be ignored
Threads started!
Operations performed:  6003 reads, 3997 writes, 12800 Other = 22800 Total
Read 93.797Mb  Written 62.453Mb  Total transferred 156.25Mb  (162.1Mb/sec)
10374.34 Requests/sec executed
Test execution summary:
total time:                          0.9639s
total number of events:              10000
total time taken by event execution: 5.9638s
per-request statistics:
min:                                  0.00ms
avg:                                  0.60ms
max:                                50.77ms
approx.  95 percentile:              1.52ms
Threads fairness:
events (avg/stddev):          625.0000/43.92
execution time (avg/stddev):  0.3727/0.05
上述参数指定了最大创建16个线程,创建的文件总大小为3G,文件读写模式为随机读。
4、内存测试
内存测试测试了内存的连续读写性能。
上面这条语句指定了整个测试过程中,传输4G的数据量,每个block的大小为8K(大写的K)。
测试结果如下所示,我们最关心的是吞吐量(3980.82MB/sec),和后面的磁盘io 测试结果比较可知,内存的连续读写比磁盘的连续读写快十几倍。
sysbench --test=memory --memory-block-size=8k --memory-total-size=4G run
sysbench 0.5:  multi-threaded system evaluation benchmark
Running the test with following options:
Number of threads: 1
Random number generator seed is 0 and will be ignored
Threads started!
Operations performed: 524288 (509544.86 ops/sec)
4096.00 MB transferred (3980.82 MB/sec)
Test execution summary:
total time:                          1.0289s
total number of events:              524288
total time taken by event execution: 0.8602s
per-request statistics:
min:                                  0.00ms
avg:                                  0.00ms
max:                                  0.52ms
approx.  95 percentile:              0.00ms
Threads fairness:
events (avg/stddev):          524288.0000/0.00
execution time (avg/stddev):  0.8602/0.00
上述参数指定了本次测试整个过程是在内存中传输 4G 的数据量,每个 block 大小为 8K。
5、文件IO基准测试
文件IO(fileio)基准测试可以测试系统在不同IO负载下的性能。这对于比较不同的硬盘驱动器,不同的RAID 卡,不同的RAID 模式,都很有帮助。可以根据测试结果调整IO子
系统。
文件IO基准测试模拟了很多InnoDB 的IO特性。
测试的第一步是准备(Prepare)阶段,生成测试用到的数据文件,生成的数据文件至少要比内存大。
如果文件中的数据能完全放入内存中,则操作系统 缓存大部分的数据,导致测试结果无法体现IO密集型的工作负载。首先通过下面的命令创建一个数据集:
sysbench --test=fileio --file-total-size=10G prepare
这个命令会在当前工作目录下创建测试文件,后续的运行(run)阶段将通过读写这些文件进行测试。 第二步就是运行(run)阶段,针对不同的IO 类型有不同的测试选项:
seqwr 顺序写入
seqrewr 顺序重写
seqrd 顺序读取
rndrd 随机读取
rndwr 随机写入
rndrw 混合随机读/写
下面的命令运行文件I/O混合随机读/写基准测试:
sysbench --test=fileio --file-total-size=10G --file-test-mode=rndrw\
--init-rng=on --max-time=300 --max-requests=0 run
sysbench 0.5:  multi-threaded system evaluation benchmark
Running the test with following options:
Number of threads: 1
Random number generator seed is 0 and will be ignored
Threads started!
Operations performed:  614700 reads, 409800 writes, 1311274 Other = 2335774 Total
Read 9.3796Gb  Written 6.2531Gb  Total transferred 15.633Gb  (53.357Mb/sec)
3414.85 Requests/sec executed
Test execution summary:
total time:                          300.0136s
total number of events:              1024500
total time taken by event execution: 230.5468s
per-request statistics:
min:                                  0.00ms
avg:                                  0.23ms
max:                                508.81ms
approx.  95 percentile:              0.18ms
Threads fairness:
events (avg/stddev):          1024500.0000/0.00
execution time (avg/stddev):  230.5468/0.00
输出结果中包含了大量的信息。和IO子系统密切相关的包括每秒请求数和总吞吐量。在上述例子中, 每秒请求数是3414.85 Requests/sec , 吞吐量是53.357Mb/sec 。
另外,时间信息也非常有用, 尤其是大约95%的时间分布。这些数据对于评估磁盘性能十分有用。
测试完成以后,运行清除(cleanup)操作删除第一步生成的测试文件。
sysbench --test=fileio --fil-total-size=10G cleanup
互斥锁(mutex)
测试互斥锁的性能,方式是模拟所有线程在同一时刻并发运行,并都短暂请求互斥锁。
sysbench --test=mutex --num-threads=16 --mutex-num=2048 \
--mutex-locks=1000000 --mutex-loops=5000 run
输出结果如下:
Number of threads: 16
Doing mutex performance test
Threads started!
Done.
Test execution summary:
total time:                          3.6123s
total number of events:              16
total time taken by event execution: 57.6636
per-
request statistics:
min:                              3580.79ms
avg:                              3603.98ms
max:                              3610.94ms
approx.  95 percentile:        10000000.00ms
Threads fairness:
events (avg/stddev):          1.0000/0.00
execution time (avg/stddev):  3.6040/0.01
6、互斥锁(mutex)
测试互斥锁的性能,方式是模拟所有线程在同一时刻并发运行,并都短暂请求互斥锁。
python数据分析流程sysbench --test=mutex --num-threads=16 --mutex-num=2048 \
--mutex-locks=1000000 --mutex-loops=5000 run
输出结果如下:
Running the test with following options:
Number of threads: 16
Random number generator seed is 0 and will be ignored
Threads started!
Test execution summary:
total time:                          0.7081s
total number of events:              16
total time taken by event execution: 10.9535s
per-request statistics:
min:                                649.61ms
avg:                                684.59ms
max:                                700.39ms
approx.  95 percentile:            700.10ms
Threads fairness:
events (avg/stddev):          1.0000/0.00
execution time (avg/stddev):  0.6846/0.02
7、OLTP测试
下面来看最重要也是最复杂的测试————oltp。oltp 基准测试模拟了一个简单的事物处理系统的工作负载。 下面的例子使用的是一张超过百万行记录的表,第一步是先生成这张表:
sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test \
--mysql-user=root prepare
生成数据只需要上面这条简单的命令即可。这条命令在test 数据库中新建了一个表(sbtest),并在表中插入了1000000条记录。
对于非默认安装的mysql,需要指定连接到msyql服务器的socket(myf中的socket值),如下所示:
sysbench --test=oltp --oltp-table-size=1000000 --mysql-user=root \
--mysql-db=test --mysql-socket=/data/ntse/lmx/sysbench/var/mysqld.sock \
prepare
数据加载完成以后就可以开始测试了,这个例子采用了16个线程,测试时长为720秒:
sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test \
--mysql-user=root --max-time=720 --max-requests=0 \
--num-threads=16 --oltp-test-mode=complex run
与插入记录时一样,如果mysql是非默认安装,还需要指定--mysql-socket的值。
Number of threads: 16
Doing OLTP test.
Running mixed OLTP test
Using Special distribution (12 iterations,  1 pct of values are returned in 75 pct cases)
Using "BEGIN" for starting transactions
Using auto_inc on the id column
Threads started!
Time limit exceeded,
(last message repeated 15 times)
Done.
OLTP test statistics:
queries performed:
read:                            26225724
write:                       
9366330
other:                          3746532
total:                          39338586
transactions:                        1873266 (2601.71 per sec.)
deadlocks:                          0      (0.00 per sec.)
read/write requests:                35592054 (49432.47 per sec.)
other operations:                    3746532 (5203.42 per sec.)
Test execution summary:
total time:                          720.0136s
total number of events:              1873266
total time taken by event execution: 11506.8251
per-request statistics:
min:                                  2.37ms
avg:                                  6.14ms
max:                                400.48ms
approx.  95 percentile:              14.90ms
Threads fairness:
events (avg/stddev):          117079.1250/275.62
execution time (avg/stddev):  719.1766/0.01
如上所示,结果中包含了相当多的信息。其中最有价值的信息如下;
总的事务数
每秒事务数
时间统计信息(最小,平均,最大响应时间,以及95%百分比响应时间)
线程公平性统计信息
最最重要的当然是每秒事务数(2601.71 per sec.)。
oltp 测试注意事项:
--max-requests --max-requests 默认值为10000 ,如果设置了--max-requests 或者使用默认值 ,分析结果的时候主要查看运行时间(total time),一般情况下,都将--max-requests 赋值为0 ,即不限制请求数量,通过--max-time 来指定测试时长,然后查看系统的每秒事务数。
--oltp-test-mode
--oltp-test-mode用以指定测试模式,取值有(simeple,complex,nontrx),默认是complex。不同模式会执行不同的语句。 具体执行语句如下所示:
Simple 这种模式只是简单的执行selec语句。
SELECT c FROM sbtest WHERE id=N 
complex(Advanced transactional) 在事务中,可能包含下列语句。
mysql无法连接到服务器
Point queries:
SELECT c FROM sbtest WHERE id=N
Range queries:
SELECT c FROM sbtest WHERE id BETWEEN N AND M
Range SUM() queries:
SELECT SUM(K) FROM sbtest WHERE id BETWEEN N and M
Range ORDER BY queries:
SELECT c FROM sbtest WHERE id between N and M ORDER BY c
Range DISTINCT queries:
SELECT DISTINCT c FROM sbtest WHERE id BETWEEN N and M ORDER BY c
UPDATEs on index column:
UPDATE sbtest SET k=k+1 WHERE id=N
UPDATEs on non-index column:
UPDATE sbtest SET c=N WHERE id=M
DELETE queries:
DELETE FROM sbtest WHERE id=N
INSERT queries:
INSERT INTO sbtest VALUES (...)
nontrx(Non-transactional) 这种模式包含下列SQL语句。
Point queries:
SELECT pad FROM sbtest WHERE id=N
UPDATEs on index column:
UPDATE sbtest SET k=k+1 WHERE id=N
UPDATEs on non-index column:
UPDATE sbtest SET c=N WHERE id=M
DELETE queries:
DELETE FROM sbtest WHERE id=N
INSERT queries:
INSERT INTO sbtest (k, c, pad) VALUES(N, M, S)
学python好还是学java好
simple 与 --oltp-read-only 的区别
simple模式和

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。