• sysbench(oltp测试)使用说明


    在oltp测试中,它基本上分为三个阶段:

    一是prepare阶段,在此阶段,sysbench会在被测试数据库中建立一张表,名为sbtest。这张表默认是在sbtest库中。你可以随意指定其它自己手动建立的库,即使你指定为sbtest库,库仍然需要你手动建立, sysbench并不会为你建立库。
    sbtest表的结构如下:

    复制代码
    CREATE TABLE `sbtest` (
      `id` 
    int(10) unsigned NOT NULL AUTO_INCREMENT,
      `k` 
    int(10) unsigned NOT NULL DEFAULT '0',
      `c` 
    char(120NOT NULL DEFAULT '',
      `pad` 
    char(60NOT NULL DEFAULT '',
      
    PRIMARY KEY (`id`),
      
    KEY `k` (`k`));
    复制代码

    在表结构建立完成后,它会被填充入你指定的行数(--oltp-table-size)

    二是run阶段,这个阶段中有三个mode可以使用:
    1.simple mode,如果指定为此mode,那么在运行过程中, sysbench的每个thread将只会运行如下的语句:

    SELECT c FROM sbtest WHERE id=

    N值是个随机值,它的范围将会从1...<table size>

    2.advanced transactional mode
    如果启用此模式,那么sysbench的每个thread将会在测试表上(sbtest)上执行事务。不过要注意的是,对于表(sbtest使用的引擎)是否支持事务,其执行的过程是不一样的。如果是innodb engine,那么它将会使用BEGIN/COMMIT 语句来start/stop一个事务;如果是MyISAM  engine,sysbench将会使用LOCK TABLES/UNLOCK TABLES语句。在一个事务中若是有一些记录被删除了,不用担心,在同一个事务中,会有相同的记录被补回。所以同一张sbtest测试表可以多次用来进行测试。
    这个mode中包含执行的语句如下:

    复制代码
    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=
    UPDATEs 
    on non-index column:
    UPDATE sbtest SET c=WHERE id=
    DELETE queries:
    DELETE FROM sbtest WHERE id=
    INSERT queries:
    INSERT INTO sbtest VALUES (...)
    复制代码

    3.Non-transcational mode
    这个mode与simple mode相似,不同的地方是可以自主选择想要运行的query,这里要注意的是,它与Advanced transcational mode的区别,它在查询请求间不会保护测试表中的数据,所以如果有多次测试的话,需要进行cleanup/prepare操作。
    它包含执行的语句如下:

    复制代码
    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=WHERE id=M
    DELETE queries:
    DELETE FROM sbtest WHERE id=N
    The generated row IDs are 
    unique over each test run, so no row is deleted twice.
    INSERT queries:
    INSERT INTO sbtest (k, c, pad) VALUES(N, M, S)
    复制代码

    最后一个阶段就是cleanup,这个没什么好讲的。就是清除测试数据。

    上面的内容来自手册,但似乎手册的内容已经很长时间不更新了,所以在实际应用中应该查看sysbench的help:
    以下是sysbench的oltp相关测试选项:

    复制代码
      --oltp-test-mode=STRING         test type to use {simple,complex,nontrx,sp} [complex]
      --oltp-reconnect-mode
    =STRING    reconnect mode {session,transaction,query,random} [session]
      --oltp-sp-name
    =STRING           name of store procedure to call in SP test mode []
      --oltp-read-only
    =[on|off]       generate only 'read' queries (do not modify database) [off]
      --oltp-skip-trx
    =[on|off]        skip BEGIN/COMMIT statements [off]
      --oltp-range-size
    =N             range size for range queries [100]
      --oltp-point-selects
    =N          number of point selects [10]
      --oltp-simple-ranges
    =N          number of simple ranges [1]
      --oltp-sum-ranges
    =N             number of sum ranges [1]
      --oltp-order-ranges
    =N           number of ordered ranges [1]
      --oltp-distinct-ranges
    =N        number of distinct ranges [1]
      --oltp-index-updates
    =N          number of index update [1]
      --oltp-non-index-updates
    =N      number of non-index updates [1]
      --oltp-nontrx-mode
    =STRING       mode for non-transactional test {select, update_key, update_nokey, insert, delete} [select]
      --oltp-auto-inc
    =[on|off]        whether AUTO_INCREMENT (or equivalent) should be used on id column [on]
      --oltp-connect-delay
    =N          time in microseconds to sleep after connection to database [10000]
      --oltp-user-delay-min
    =N         minimum time in microseconds to sleep after each request [0]
      --oltp-user-delay-max
    =N         maximum time in microseconds to sleep after each request [0]
      --oltp-table-name
    =STRING        name of test table [sbtest]
      --oltp-table-size
    =N             number of records in test table [10000]
      --oltp-dist-type
    =STRING         random numbers distribution {uniform,gaussian,special} [special]
      --oltp-dist-iter
    =N              number of iterations used for numbers generation [12]
      --oltp-dist-pct
    =N               percentage of values to be treated as 'special' (for special distribution) [1]
      --oltp-dist-res
    =N               percentage of 'special' values to use (for special distribution) [75]
    复制代码

    安装sysbench(补充)

    sysbench安装有时会很麻烦,如果用rpm包或在ubuntu上用apt-get在线安装会容易许多。不过我倾向与使用tar包安装,特别是使用的数据库大多不是系统提供的版本时。

    1.去官站下载tar包(略)

    2.安装:

    # tar -zxvf sysbench-0.4.12.tar.gz 
    # cd sysbench-
    0.4.12
    # ./autogen.sh
    # ./configure --with-mysql-includes
    =/usr/local/mysql/include --with-mysql-libs=/usr/local/mysql/lib
    # make && make install

     在安装过程中可能会遇到三个问题:

    一是在编译时会报libtools错误,解决的方法是在configure之前运行autogen.sh脚本;

    二是在运行sysbench时报如下错误:

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

    遇到此问题需要将libmysqlclient.so.xx文件所在的目录append至/etc/ld.so.conf文件

    如果还是不行,可执行export LD_LIBRARY_PATH=/usr/local/mysql/lib 

    三是报如下错误:

    # sysbench --test=oltp  --db-driver=mysql --mysql-host=localhost --mysql-socket=/tmp/mysql.sock  --mysql-user=root --mysql-table-engine=innodb  --oltp-table-size=100000000 prepare                   
    sysbench 0.4.12:  multi-threaded system evaluation benchmark
     
    FATAL: unable to connect to MySQL server, aborting...
    FATAL: error 1049: Unknown database 'sbtest'
    FATAL: failed to connect to database server!

    解决方法是加--mysql-db option,告诉sysbench往哪个数据库中装填数据

     参考:

    http://sysbench.sourceforge.net/docs/ 

    http://www.penglixun.com/tech/system/install_sysbench.html

     
  • 相关阅读:
    mysql的binlog日志格式
    Git的基本使用
    Tomcat安装部署
    [ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)]
    云盘的创建及使用
    ntp服务器配置
    如何更改mysql的密码策略?
    Centos6 升级glibc-2.17,解决Requires: libc.so.6(GLIBC_2.14)(64bit)错误解决方法
    Git的基本使用
    UES
  • 原文地址:https://www.cnblogs.com/168cuiyuan/p/2816494.html
Copyright © 2020-2023  润新知