更多博文请关注:没有伞的孩子必须努力奔跑 (www.xuchanggang.cn)


1.sysbench 简述:

  sysbench是一个模块化的、跨平台、多线程基准,主要用于评估测试各种不同系统、参数下的数据库负载情况。它主要包括以下几种方式的测试 :
  (1).cpu性能
  (2).磁盘io性能
  (3).调度程序性能
  (4).内存分配及传输速度
  (5).POSIX线程性能
  (6).数据库性能(OLTP基准测试)
        目前sysbench主要支持 mysql,pgsql,oracle 这3种数据库
# 注:不要认为sysbench安装很简单,其实蛮复杂的,动不动就报错,最下面了摘录了报错,基本上都能解决问题
2.sysbench的安装
 (2).安装依赖环境:
       yum -y install gcc automake libtool
# 以下步骤,仅针对用rpm包默认安装mysql执行的操作,需要安装mysql,mysql-server,mysql-libs,mysql-devel,不然会报错
      yum -y install mysql mysql-server mysql-libs mysql-devel
 (3).解压安装sysbench
       tar -xf  sysbench-0.4.12.tar.gz
       cd sysbench-0.4.12
       ./autogen.sh
       ./configure
       make
       make install
# 注:
  如果想要让 sysbench 支持 pgsql/oracle 的话,就需要在编译的时候加上参数:--with-pgsql 或者 --with-oracle,这2个参数默认是关闭的,只有 MySQL 是默认支持的。

# 如果你的mysql是自己通过源码编译安装的,则使用如下方法,指定mysql的函数库位置和头文件位置
     ./configure –with-mysql-includes=/usr/local/mysql/include  –with-mysql-libs=/usr/local/mysql/lib
# --with-mysql-includes指定函数库位置
# --with-mysql-libs指定头文件位置

3.性能测试:
(1).cpu性能测试
    sysbench --test=cpu --cpu-max-prime=20000 run
# cpu测试主要是进行素数的加法运算,在上面的例子中,指定了最大的素数为 20000,自己可以根据机器cpu的性能来适当调整数值,主要看total time所花费的时间
# sysbench --test=cpu --num-threads=`grep "processor" /proc/cpuinfo | wc -l` --cpu-max-prime=200000 run
# grep "processor" /proc/cpuinfo | wc -l :获取cpu的线程数
(2).线程测试
    sysbench --test=threads --num-threads=64 --thread-yields=100 --thread-locks=2 run
# thread-locks小于线程数除以2,lock越少,处理时间越长。
(3).磁盘IO性能测试[主要看每秒请求数(request)和总体的吞吐量(total),这两个参数对评估磁盘性能有帮助]
# 初识准备
    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
# 上述参数指定了最大创建16个线程,创建的文件总大小为3G,文件读写模式为随机读写。
# seqwr 顺序写 / seqrewr 连续改写 / seqrd 连续读 / rndrd 随机读取 / rndwr 随机写 / rndrw 结合随机读/写
(4).内存测试
    sysbench --test=memory --memory-block-size=8k --memory-total-size=4G run
# 上述参数指定了本次测试整个过程是在内存中传输 4G 的数据量,每个 block 大小为 8K。
(5).OLTP测试
官方测试范例:
# 准备数据
sysbench  --test=oltp --mysql-table-engine=innodb --oltp-table-size=5000000 --mysql-user=root --mysql-password=kongzhong --mysql-socket=/var/lib/mysql/mysql.sock  prepare
# 测试
sysbench  --test=oltp --mysql-table-engine=innodb --oltp-table-size=5000000 --mysql-user=root --mysql-password=kongzhong --mysql-socket=/var/lib/mysql/mysql.sock  run
# 删除数据
sysbench  --test=oltp --mysql-table-engine=innodb --oltp-table-size=5000000 --mysql-user=root --mysql-password=kongzhong --mysql-socket=/var/lib/mysql/mysql.sock  cleanup

4.报错及解决方式:
(1). make 时报错:
     drv_mysql.c:35:19: mysql.h: No such file or directory
# 因为找不到mysql 的头文件,安装mysql-devel、mysql-libs这两个rpm包就可以了[这个只针对使用rpm包安装mysql的]
# 如果是源码编译安装的,要指定: --with-mysql-includes=*****  --with-mysql-libs=****
# 如: ./configure --with-mysql-includes=/usr/local/mysql/include --with-mysql-libs=/usr/local/mysql/lib

(2).make 时报错:
    ../libtool: line 838: X--tag=CC: command not found
    ../libtool: line 871: libtool: ignoring unknown tag : command not found
    ../libtool: line 838: X--mode=link: command not found
    ../libtool: line 1004: *** Warning: inferring the mode of operation is deprecated.: command not found
    ../libtool: line 1005: *** Future versions of Libtool will require --mode=MODE be specified.: command not found
    ../libtool: line 2231: X-g: command not found
    ../libtool: line 2231: X-O2: command not found
# 这个问题,一般只要先运行一次autogen.sh,然后再configure,make就可以了;
# 如果还是不能解决,是因为sysbench自带的libtool 工具版本太旧。 安装一个新版本的libtool,然后,复制libtool覆盖sysbench下的libtool ,然后直接make[千万不要再./configure,否则libtool又被恢复成老版的libtool]
# 如:cp /usr/bin/libtool ~/sysbench-0.4.12/

(3).安装完成后,如果在运行时出现下面的错误提示:
    sysbench: error while loading shared libraries: libmysqlclient_r.so.18: cannot open shared object file: No such file or directory
# 使用下面的命令查看libmysqlclient_r.so.18是否存在
#   find / -name "libmysqlclient_r.so.18" -print
# 如果存在的话,网上说做软连接,我试过没用,于是使用下面的方法,就可以了,大家可以试试
# export LD_LIBRARY_PATH=/usr/local/mysql/lib