zoukankan      html  css  js  c++  java
  • 基准测试工具 sysbench 之二 压测postgresql

    os: ubuntu 16.04
    postgresql: 9.6.8
    sysbench: 1.0.15

    # lsb_release -a
    No LSB modules are available.
    Distributor ID:	Ubuntu
    Description:	Ubuntu 16.04.3 LTS
    Release:	16.04
    Codename:	xenial
    
    # su - postgres -c "psql -c "select version();""
                                                                       version                                                                    
    ----------------------------------------------------------------------------------------------------------------------------------------------
     PostgreSQL 9.6.8 on x86_64-pc-linux-gnu (Ubuntu 9.6.8-1.pgdg16.04+1), compiled by gcc (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609, 64-bit
    (1 row)
    
    # sysbench --version
    sysbench 1.0.15
    
    

    有几个大的测试主题,这个主要是针对os层面的。
    Compiled-in tests:
    fileio - File I/O test
    cpu - CPU performance test
    memory - Memory functions speed test
    threads - Threads subsystem performance test
    mutex - Mutex performance test

    # sysbench fileio help
    sysbench 1.0.15 (using bundled LuaJIT 2.1.0-beta2)
    
    fileio options:
      --file-num=N                  number of files to create [128]
      --file-block-size=N           block size to use in all IO operations [16384]
      --file-total-size=SIZE        total size of files to create [2G]
      --file-test-mode=STRING       test mode {seqwr, seqrewr, seqrd, rndrd, rndwr, rndrw}
      --file-io-mode=STRING         file operations mode {sync,async,mmap} [sync]
      --file-async-backlog=N        number of asynchronous operatons to queue per thread [128]
      --file-extra-flags=[LIST,...] list of additional flags to use to open files {sync,dsync,direct} []
      --file-fsync-freq=N           do fsync() after this number of requests (0 - don't use fsync()) [100]
      --file-fsync-all[=on|off]     do fsync() after each write operation [off]
      --file-fsync-end[=on|off]     do fsync() at the end of test [on]
      --file-fsync-mode=STRING      which method to use for synchronization {fsync, fdatasync} [fsync]
      --file-merged-requests=N      merge at most this number of IO requests if possible (0 - don't merge) [0]
      --file-rw-ratio=N             reads/writes ratio for combined test [1.5]
    
    # sysbench cpu help
    sysbench 1.0.15 (using bundled LuaJIT 2.1.0-beta2)
    
    cpu options:
      --cpu-max-prime=N upper limit for primes generator [10000]
    
    # sysbench memory help
    sysbench 1.0.15 (using bundled LuaJIT 2.1.0-beta2)
    
    memory options:
      --memory-block-size=SIZE    size of memory block for test [1K]
      --memory-total-size=SIZE    total size of data to transfer [100G]
      --memory-scope=STRING       memory access scope {global,local} [global]
      --memory-hugetlb[=on|off]   allocate memory from HugeTLB pool [off]
      --memory-oper=STRING        type of memory operations {read, write, none} [write]
      --memory-access-mode=STRING memory access mode {seq,rnd} [seq]
    
    # sysbench threads help
    sysbench 1.0.15 (using bundled LuaJIT 2.1.0-beta2)
    
    threads options:
      --thread-yields=N number of yields to do per request [1000]
      --thread-locks=N  number of locks per thread [8]
    
    # sysbench mutex help
    sysbench 1.0.15 (using bundled LuaJIT 2.1.0-beta2)
    
    mutex options:
      --mutex-num=N   total size of mutex array [4096]
      --mutex-locks=N number of mutex locks to do per thread [50000]
      --mutex-loops=N number of empty loops to do outside mutex lock [10000]
    

    oltp*.lua 文件

    # find / -name "oltp*.lua"
    /usr/share/sysbench/oltp_update_index.lua
    /usr/share/sysbench/oltp_read_only.lua
    /usr/share/sysbench/oltp_insert.lua
    /usr/share/sysbench/tests/include/oltp_legacy/oltp_simple.lua
    /usr/share/sysbench/tests/include/oltp_legacy/oltp.lua
    /usr/share/sysbench/oltp_delete.lua
    /usr/share/sysbench/oltp_write_only.lua
    /usr/share/sysbench/oltp_common.lua
    /usr/share/sysbench/oltp_update_non_index.lua
    /usr/share/sysbench/oltp_read_write.lua
    /usr/share/sysbench/oltp_point_select.lua
    
    

    安装 luajit

    # apt-get install luajit
    

    sysbench prepare for postgresql

    sysbench 
    --db-driver=pgsql 
    --pgsql-host=127.0.0.1 
    --pgsql-port=5432 
    --pgsql-user=postgres 
    --pgsql-password=postgres 
    --pgsql-db=postgres 
    --oltp-table-size=10000 
    --rand-init=on 
    --threads=10 
    --time=120 
    --events=0 
    --report-interval=10 
    --percentile=99 
    /usr/share/sysbench/tests/include/oltp_legacy/oltp.lua 
    prepare
    

    简单说明下:

    # --oltp-table-size=10000 测试表的记录数。默认是10000
    # --threads=10 表示发起 10 个并发连接
    # --time=120 表示执行120秒
    # --events=0 表示总请求数为 0,因为上面已经定义了总执行时长,所以总请求数可以设定为 0;也可以只设定总请求数,不设定最大执行时长
    # --report-interval=10 表示每10秒输出一次测试进度报告
    # --percentile=99 表示设定采样比例,默认是 95%,即丢弃1%的长请求,在剩余的99%里取最大值
    

    sysbench run for postgresql

    sysbench 
    --db-driver=pgsql 
    --pgsql-host=127.0.0.1 
    --pgsql-port=5432 
    --pgsql-user=postgres 
    --pgsql-password=postgres 
    --pgsql-db=postgres 
    --oltp-table-size=10000 
    --threads=10 
    --time=120 
    --events=0 
    --report-interval=10 
    --percentile=99 
    /usr/share/sysbench/tests/include/oltp_legacy/oltp.lua 
    run
    

    测试结果如下:

    sysbench 1.0.15 (using bundled LuaJIT 2.1.0-beta2)
    
    Running the test with following options:
    Number of threads: 10
    Report intermediate results every 10 second(s)
    Initializing random number generator from current time
    
    
    Initializing worker threads...
    
    Threads started!
    
    [ 10s ] thds: 10 tps: 92.53 qps: 1888.40 (r/w/o: 1326.51/370.93/190.96) lat (ms,99%): 1973.38 err/s: 1.50 reconn/s: 0.00
    [ 20s ] thds: 10 tps: 131.60 qps: 2653.01 (r/w/o: 1859.10/526.40/267.50) lat (ms,99%): 137.35 err/s: 1.10 reconn/s: 0.00
    [ 30s ] thds: 10 tps: 129.50 qps: 2600.49 (r/w/o: 1820.80/517.60/262.10) lat (ms,99%): 116.80 err/s: 0.60 reconn/s: 0.00
    [ 40s ] thds: 10 tps: 125.30 qps: 2520.04 (r/w/o: 1765.06/501.59/253.39) lat (ms,99%): 142.39 err/s: 0.70 reconn/s: 0.00
    [ 50s ] thds: 10 tps: 119.40 qps: 2408.55 (r/w/o: 1687.67/477.89/243.00) lat (ms,99%): 173.58 err/s: 1.20 reconn/s: 0.00
    [ 60s ] thds: 10 tps: 120.11 qps: 2412.63 (r/w/o: 1689.56/479.85/243.22) lat (ms,99%): 125.52 err/s: 0.60 reconn/s: 0.00
    [ 70s ] thds: 10 tps: 119.19 qps: 2395.06 (r/w/o: 1677.63/475.35/242.08) lat (ms,99%): 215.44 err/s: 0.50 reconn/s: 0.00
    [ 80s ] thds: 10 tps: 126.21 qps: 2538.20 (r/w/o: 1777.67/504.72/255.81) lat (ms,99%): 137.35 err/s: 1.00 reconn/s: 0.00
    [ 90s ] thds: 10 tps: 105.00 qps: 2114.55 (r/w/o: 1480.74/420.31/213.51) lat (ms,99%): 176.73 err/s: 0.80 reconn/s: 0.00
    [ 100s ] thds: 10 tps: 119.07 qps: 2397.06 (r/w/o: 1679.45/476.57/241.03) lat (ms,99%): 183.21 err/s: 0.80 reconn/s: 0.00
    [ 110s ] thds: 10 tps: 98.10 qps: 1982.46 (r/w/o: 1389.75/393.21/199.51) lat (ms,99%): 248.83 err/s: 1.20 reconn/s: 0.00
    [ 120s ] thds: 10 tps: 106.90 qps: 2162.24 (r/w/o: 1515.16/428.99/218.09) lat (ms,99%): 200.47 err/s: 1.20 reconn/s: 0.00
    SQL statistics:
        queries performed:
            read:                            196742
            write:                           55771
            other:                           28316
            total:                           280829
        transactions:                        13941  (116.09 per sec.)
        queries:                             280829 (2338.45 per sec.)
        ignored errors:                      112    (0.93 per sec.)
        reconnects:                          0      (0.00 per sec.)
    
    General statistics:
        total time:                          120.0903s
        total number of events:              13941
    
    Latency (ms):
             min:                                    6.59
             avg:                                   86.11
             max:                                 2195.49
             99th percentile:                      167.44
             sum:                              1200469.84
    
    Threads fairness:
        events (avg/stddev):           1394.1000/8.73
        execution time (avg/stddev):   120.0470/0.02
    

    由于是本地虚拟机,各项指标都偏低。

    sysbench cleanup for postgresql

    sysbench 
    --db-driver=pgsql 
    --pgsql-host=127.0.0.1 
    --pgsql-port=5432 
    --pgsql-user=postgres 
    --pgsql-password=postgres 
    --pgsql-db=postgres 
    --oltp-table-size=10000 
    --threads=10 
    --time=120 
    --events=0 
    --report-interval=10 
    --percentile=99 
    /usr/share/sysbench/tests/include/oltp_legacy/oltp.lua 
    cleanup
    

    从结果来看sysbench对postgresql,模拟的表结构太简单,不像tpcc-mysql那样完整的事务系统。但对于性能压测对比还是很有用的,因为sysbench使用的环境参数限制是一样的。

    参考:
    https://github.com/akopytov/sysbench

  • 相关阅读:
    c c++混合调用
    c调用c++函数
    WinAPI 大全
    win10 1903 vs2019 调用RtlInitUnicodeString时导致的蓝屏
    驱动读写方式
    windows内核下内存申请,链表使用函数
    通过当前IP获取当前网卡的MAC地址
    Django安装mysqlclient
    SyncTrayzor CPU占用高问题解决
    moment js如何将时间字符串转换成时间戳
  • 原文地址:https://www.cnblogs.com/ctypyb2002/p/9792876.html
Copyright © 2011-2022 走看看