• Sysbench介绍概括总结


    概念介绍

    sysbench是一个模块化的、跨平台、多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况,它主要包括以下几种方式的测试:磁盘io性能、数据库性能、内存分配及传输速度等,详细的介绍见https://github.com/akopytov/sysbench

    它主要包括以下几种方式的测试:
      1、cpu性能
      2、磁盘io性能
      3、调度程序性能
      4、内存分配及传输速度
      5、POSIX线程性能
      6、数据库性能(OLTP基准测试)
    目前sysbench主要支持 MySQL,pgsql,oracle 这3种数据库
     
    以下主要介绍对于OLTP的测试使用,基于sysbench 1.0.18版本

    下载安装

    unbun安装方法,centos的安装详见:https://github.com/akopytov/sysbench#debianubuntu  注意查看【从二进制包安装】

    curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.deb.sh | sudo bash


    sudo apt -y install sysbench

    检查安装是否成功

    sysbench --version

    安装后检查脚本存放路径

    /usr/share/doc/sysbench/    #存放着各种脚本

    想要看其他安装的路径,使用如下方式

    whereis sysbench

    (注)得出的结果为:sysbench: /usr/bin/sysbench /usr/share/sysbench /usr/share/man/man1/sysbench.1.gz /usr/share/doc/sysbench/

    支持的脚本

    bulk_insert.lua*
    oltp_000.lua
    oltp_common.lua
    oltp_delete.lua*
    oltp_insert.lua*
    oltp_point_select.lua*
    oltp_read_only.lua*
    oltp_read_write.lua*
    oltp_update_index.lua*
    oltp_update_non_index.lua*
    oltp_write_only.lua*
    select_random_points.lua*
    select_random_ranges.lua* 

    测试语法

    --point_selects:主键等值查询
    SELECT c FROM sbtest%u WHERE id=?
    -- simple_ranges:简单范围查询(主键range)
    SELECT c FROM sbtest%u WHERE id BETWEEN ? AND ?
    -- sum_ranges:范围求和(简单范围查询的基础上做sum)
    SELECT SUM(k) FROM sbtest%u WHERE id BETWEEN ? AND ?
    -- order_ranges:简单范围查询(主键range的基础上做排序)
    SELECT c FROM sbtest%u WHERE id BETWEEN ? AND ? ORDER BY c
    -- distinct_ranges:去重范围查询(主键range + 排序 + 去重)
    SELECT DISTINCT c FROM sbtest%u WHERE id BETWEEN ? AND ? ORDER BY c
    -- index_updates:索引更新操作
    UPDATE sbtest%u SET k=k+1 WHERE id=?
    -- non_index_updates:非索引更新
    UPDATE sbtest%u SET c=? WHERE id=?
    -- deletes:删除操作
    DELETE FROM sbtest%u WHERE id=?
    -- inserts:插入操作
    INSERT INTO sbtest%u (id, k, c, pad) VALUES (?, ?, ?, ?)

    性能指标

    标准的性能指标

    TPS:每秒执行事务数TPS(Transactions Per Second),数据库每秒执行的事务数,以COMMIT成功次数为准
    • SysBench标准OLTP读写混合场景中一个事务包含18个读写SQL。
    • SysBench标准OLTP只读场景中一个事务包含14个读SQL(10条主键点查询、4条范围查询)。
    • SysBench标准OLTP只写场景中一个事务包含4个写SQL(2条UPDATE、1条DETELE、1条INSERT)
    QPS:每秒执行请求数QPS(Queries Per Second),数据库每秒执行的SQL数,包含INSERT、SELECT、UPDATE、DETELE、COMMIT等。
    Latency (ms):95th percentile

    不同场景的性能指标

    读写场景压测

    • TPS:对应测试结果的transactions(xx per sec)
    • QPS:对应测试结果的queries
      • 数据库读写时每秒执行的SQL数(含insert、select、update)
    • 响应时间(RT):对应Latency(ms)的95th percentile

     只读场景压测

    • QPS:对应测试结果的queries
      • 数据库只读时每秒执行的SQL数(仅包含select)
    • 响应时间(RT):对应Latency(ms)的95th percentile

    只写场景压测

    • TPS:对应测试结果的transactions
    • 响应时间(RT):对应Latency(ms)的95th percentile

    insert等其他场景创建表的SQL

    Create Table `sbtest2` (
     `id` bigint NOT NULL AUTO_INCREMENT,
     `k` int NOT NULL DEFAULT '0',
     `c` varchar NOT NULL DEFAULT '',
     `pad` varchar NOT NULL DEFAULT '',
     primary key (id)
    ) DISTRIBUTE BY HASH(`id`) INDEX_ALL='Y'

    bulk insert的建表SQL

    Create Table `sbtest1` (
     `id` int NOT NULL,
     `k` int NOT NULL DEFAULT '0',
     primary key (id)
    ) DISTRIBUTE BY HASH(`id`) INDEX_ALL='Y'

    测试的步骤

    prepare:测试前准备工作(生成测试需要的数据);

    run:进行性能测试

    cleanup:测试后删掉测试数据

    说明:每个不同类型的测试均按照如上的步骤进行执行,避免上次的测试结果会影响到下一次的执行,示例:执行oltp_insert的测试,想要测试3遍计算得出平均值,那么如上的测试步骤需要分别执行3次。

    执行脚本(insert示例)

    注意:每个不同类型的测试,给定的参数不一样,一定要注意检查,每个不同类型具体怎么测试,会在后面的文章中进行详细解释

    ##准备数据
    sysbench /usr/share/sysbench/oltp_insert.lua --tables=5 --table_size=100 --mysql-host=192.168.30.118 --mysql-port=3001 --mysql-db=syw_sysbench --mysql-user=kepler --mysql-password=afdd0b4ad2ec172c586e2150770fbf9e  prepare
    
    ##运行测试
    sysbench /usr/share/sysbench/oltp_insert.lua --tables=5 --table_size=100 --threads=5  --mysql-host=192.168.30.118 --mysql-port=3001 --mysql-db=syw_sysbench --mysql-user=kepler --mysql-password=afdd0b4ad2ec172c586e2150770fbf9e --create_secondary=off --time=30 --report-interval=3 run
    
    ##清理数据
    sysbench /usr/share/sysbench/oltp_insert.lua --tables=5 --table_size=100 --threads=5  --mysql-host=192.168.30.118 --mysql-port=3001 --mysql-db=syw_sysbench --mysql-user=kepler --mysql-password=afdd0b4ad2ec172c586e2150770fbf9e --create_secondary=off --time=30 --report-interval=3 cleanup

    参数介绍

    常用数据库选项

    --db-driver=STRING 设置程序使用的数据库驱动。默认值 mysql

    常用mysql选项

    --mysql-host=host                 mysql服务主机地址     默认localhost
     --mysql-port=3306                 mysql服务端口  默认值 3306
     --mysql-user=STRING             mysql用户名称 默认值 sbtest
     --mysql-password=STRING     mysql密码,默认值  []
     --mysql-db=STRING                 mysql数据库名称 默认 sbtest

    常用一般命令选项

    --threads  需要创建的worker线程数量   默认值 1
    --events=N  设置期望执行的事件总数。0表示不限制  默认值 0
    --time=N  设置总执行时间,单位秒。0表示不限制。  默认值 10
    --forced-shutdown=STRING  超过--time限制后,关闭程序之前需要等待的秒数,如果设置为off则表示不启用。 默认值 off
    --rate=N    平均事务速率。 0表示不限制。默认值 0
    --report-interval=N    设置定期报告中间统计的时间间隔为N,单位为秒 。 0表示不设置。默认值 0

    注意事项(重要):

    1. 如果运行程序命令时,如果当前总执行时间已经达到--time选项参数值(默认10秒),不管当前已执行事件总数是否达到--events选项参数值,都会停止运行程序,所以如果需要为程序命令显示指定--events选项时,需要合理的设置--time选项参数值。
    2. 如果运行程序命令时,如果当前已执行事件总数已达到--events选项参数值,不管当前总执行时间是否达到--time选项参数值,都会停止测试

    常用日志选项

    --verbosity=N  日志详细级别 {5 - debug, 0 - 仅critical messages}  默认值 3
     --percentile=N  延时统计(latency statistics)中,需要计算的百分比 (1-100)。设置为0表示禁用百分比值计算。 Use the special

    sysbench oltp_insert help参数选项

    注:想看其他的参数选项,语法为:sysbench XXX help,自己想看的参数替换掉xxx即可

    --auto_inc[=on|off]     id列默认自增,默认[on]
    --create_secondary[=on|off] 索引不是主键索引而是二级索引,默认[off]
    --delete_inserts=N 每个事务的delete、insert的组合数,默认[1]
    --distinct_ranges=N 单个事务中执行范围distinct查询的数量,默认[1]

    --index_updates=N 单个事务中执行索引更新的操作的数量,默认[1]

    --mysql_storage_engine=STRING mysql的存储引擎,默认是[innodb]

    --non_index_updates=N 单个事务中执行索引更新的操作的数量,默认[1]

    --order_ranges=N 单个事务中执行范围order by查询的数量,默认[1]

    --pgsql_variant=STRING 在运行pgsql的驱动程序时,使用了pgsql的变体,当前仅仅支持的variant是'redshift',当启动时,
    将自动禁用create_secondary为不可用,并将delete_insert设置为0


    --point_selects=N 单个事务中select查询的数量,默认 [10]

    --range_selects[=on|off] 启用/禁用所有SELECT查询[on]
    --secondary[=on|off]    使用二级索引代替逐渐,默认[off]
    --range_size=N    查询范围。默认是100
    --simple_ranges=N     每个事务的简单查询范围select,默认[1]

    --skip_trx[=on|off] 语句以bigin/commit开始结尾,默认[off]

    --sum_ranges=N 每个事务的select sum的查询总量,默认[1]

    --table_size=N 指定表的记录大小(行的数量),默认[10000]

    --tables=N 创建的表数量,默认[1]

    测试结果解读

    sysbench 1.0.18:  multi-threaded system evaluation benchmark
    
    Running the test with following options:
    Number of threads: 8
    Report intermediate results every 10 second(s)
    Random number generator seed is 0 and will be ignored
    
    
    Threads started!
    -- 每10秒钟报告一次测试结果,tps、每秒读、每秒写、99%以上的响应时长统计,此部分的内容来自于参数:--report-interval=10
    [  10s] threads: 8, tps: 1111.51, reads/s: 15568.42, writes/s: 4446.13, response time: 9.95ms (99%)
    [  20s] threads: 8, tps: 1121.90, reads/s: 15709.62, writes/s: 4487.80, response time: 9.78ms (99%)
    [  30s] threads: 8, tps: 1120.00, reads/s: 15679.10, writes/s: 4480.20, response time: 9.84ms (99%)
    [  40s] threads: 8, tps: 1114.20, reads/s: 15599.39, writes/s: 4456.30, response time: 9.90ms (99%)
    [  50s] threads: 8, tps: 1114.00, reads/s: 15593.60, writes/s: 4456.70, response time: 9.84ms (99%)
    [  60s] threads: 8, tps: 1119.30, reads/s: 15671.60, writes/s: 4476.50, response time: 9.99ms (99%)
    SQL statistics:
    queries performed:     执行的SQL查询:
    read:                 读请求次数
    write:                写请求次数
    other:                其它请求次数
    total:                总请求次数
    transactions:         执行的事务总数 (每秒事务数.)
    queries:              执行的查询总次数 (每秒查询次数.)
    ignored errors:       忽略错误数 (每秒忽略错误次数.)
    reconnects:           数据库重连次数 (每秒重连次数.)
    
    General statistics:
    total time:           总运行时间,以秒为单位
    total number of events:       总执行事件数
    
    Latency(毫秒为单位):
    min:                  最小请求响应时间
    avg:                  平均请求响应时间
    max:                  最大请求响应时间
    95th percentile:      95%的请求响应时间
    sum:                  总请求响应时间
    
    Threads fairness:
    events (avg/stddev):           执行的事件总数(平均每个线程执行的事件总数/标准差)
    execution time (avg/stddev):   执行耗时(平均每个线程执行事件耗时/标准差)
  • 相关阅读:
    跟我extjs5(38--单个模块的设计[6获得模块列表数据])
    Visual Prolog 的 Web 专家系统 (8)
    ssh, maven and eclipse 那些破事
    在工厂模式
    IOS获取来电去电来电归属系统通知达到效果(一)
    基于CORS的geoserver同源访问策略
    springMVC1 springmvc的基础知识
    mybatis0212 mybatis逆向工程 (MyBatis Generator)
    mybatis0211 mybatis和spring整合
    mybatis0210 mybatis和ehcache缓存框架整合
  • 原文地址:https://www.cnblogs.com/syw20170419/p/16145808.html
Copyright © 2020-2023  润新知