现在的位置: 首页 > Linux > 正文

关于使用sysbench测试数据库的负载情况

时间:2013年12月29日 | 分类:Linux | 评论:0 条 | 浏览:1,883 次
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

×