zoukankan      html  css  js  c++  java
  • kbbench的基本使用

    前言

    kbbench是一种在KingbaseES上运行基准测试的简单程序。它可能在并发的数据库会话中一遍一遍地运行相同序列的 SQL 命令,并且计算平均事务率(每秒的事务数)。默认情况下,kbbench会测试一种基于 TPC-B 但是要更宽松的场景,其中在每个事务中涉及五个SELECT、UPDATE以及INSERT命令。但是,通过编写自己的事务脚本文件很容易用来测试其他情况。

    本文记录kbbench的参数介绍以及使用kbbench进行简单的数据库压力测试

    参数介绍

    直接通过help命令查看

    [cli@localhost bin]$ ./kbbench --help
    kbbench is a benchmarking tool for Kingbase.
     
    Usage:
      kbbench [OPTION]... [DBNAME]
     
    Initialization options:
      -i, --initialize         invokes initialization mode
      -F, --fillfactor=NUM     set fill factor
      -n, --no-vacuum          do not run VACUUM after initialization
      -q, --quiet              quiet logging (one message each 5 seconds)
      -s, --scale=NUM          scaling factor
      --foreign-keys           create foreign key constraints between tables
      --index-tablespace=TABLESPACE
                               create indexes in the specified tablespace
      --tablespace=TABLESPACE  create tables in the specified tablespace
      --unlogged-tables        create tables as unlogged tables
     
    Options to select what to run:
      -b, --builtin=NAME[@W]   add builtin script NAME weighted at W (default: 1)
                               (use "-b list" to list available scripts)
      -f, --file=FILENAME[@W]  add script FILENAME weighted at W (default: 1)
      -N, --skip-some-updates  skip updates of kbbench_tellers and kbbench_branches
                               (same as "-b simple-update")
      -S, --select-only        perform SELECT-only transactions
                               (same as "-b select-only")
     
    Benchmarking options:
      -c, --client=NUM         number of concurrent database clients (default: 1)
      -C, --connect            establish new connection for each transaction
      -D, --define=VARNAME=VALUE
                               define variable for use by custom script
      -j, --jobs=NUM           number of threads (default: 1)
      -l, --log                write transaction times to log file
      -L, --latency-limit=NUM  count transactions lasting more than NUM ms as late
      -M, --protocol=simple|extended|prepared
                               protocol for submitting queries (default: simple)
      -n, --no-vacuum          do not run VACUUM before tests
      -P, --progress=NUM       show thread progress report every NUM seconds
      -r, --report-latencies   report average latency per command
      -R, --rate=NUM           target rate in transactions per second
      -s, --scale=NUM          report this scale factor in output
      -t, --transactions=NUM   number of transactions each client runs (default: 10)
      -T, --time=NUM           duration of benchmark test in seconds
      -v, --vacuum-all         vacuum all four standard tables before tests
      --aggregate-interval=NUM aggregate data over NUM seconds
      --progress-timestamp     use Unix epoch timestamps for progress
      --sampling-rate=NUM      fraction of transactions to log (e.g., 0.01 for 1%)
     
    Common options:
      -d, --debug              print debugging output
      -h, --host=HOSTNAME      database server host or socket directory
      -p, --port=PORT          database server port number
      -U, --username=USERNAME  connect as specified database user
      -V, --version            output version information, then exit
      -?, --help               show this help, then exit
     
    Report bugs to <kingbase-bugs@kingbase.com.cn>

    数据准备

    使用命令:kbbench -i [ other-options ] dbname

    如:

    ./kbbench -USYSTEM -p50001 -i TEST -s20

    -i
    --initialize

    要求调用初始化模式。 

    -s

    -- scale_factor

    --scale=scale_factor

    将生成的行数乘以比例因子。例如,-s 100将在kbbench_accounts表中创建 10,000,000 行。默认为 1。当比例为 20,000 或更高时,用来保存账号标识符的列(aid列)将切换到使用更大的整数(bigint),这样才能足以保存账号标识符。 

    [cli@localhost bin]$ ./kbbench -USYSTEM -p50001 -i TEST -s20
    Password:
    creating tables...
    100000 of 2000000 tuples (5%) done (elapsed 0.27 s, remaining 5.17 s)
    200000 of 2000000 tuples (10%) done (elapsed 0.54 s, remaining 4.85 s)
    300000 of 2000000 tuples (15%) done (elapsed 0.82 s, remaining 4.64 s)
    400000 of 2000000 tuples (20%) done (elapsed 1.13 s, remaining 4.50 s)
    500000 of 2000000 tuples (25%) done (elapsed 1.41 s, remaining 4.23 s)
    600000 of 2000000 tuples (30%) done (elapsed 1.66 s, remaining 3.88 s)
    700000 of 2000000 tuples (35%) done (elapsed 1.96 s, remaining 3.64 s)
    800000 of 2000000 tuples (40%) done (elapsed 2.22 s, remaining 3.32 s)
    900000 of 2000000 tuples (45%) done (elapsed 2.50 s, remaining 3.06 s)
    1000000 of 2000000 tuples (50%) done (elapsed 2.78 s, remaining 2.78 s)
    1100000 of 2000000 tuples (55%) done (elapsed 3.07 s, remaining 2.51 s)
    1200000 of 2000000 tuples (60%) done (elapsed 3.38 s, remaining 2.25 s)
    1300000 of 2000000 tuples (65%) done (elapsed 3.67 s, remaining 1.97 s)
    1400000 of 2000000 tuples (70%) done (elapsed 4.04 s, remaining 1.73 s)
    1500000 of 2000000 tuples (75%) done (elapsed 4.31 s, remaining 1.44 s)
    1600000 of 2000000 tuples (80%) done (elapsed 4.56 s, remaining 1.14 s)
    1700000 of 2000000 tuples (85%) done (elapsed 4.85 s, remaining 0.86 s)
    1800000 of 2000000 tuples (90%) done (elapsed 5.19 s, remaining 0.58 s)
    1900000 of 2000000 tuples (95%) done (elapsed 5.53 s, remaining 0.29 s)
    2000000 of 2000000 tuples (100%) done (elapsed 5.82 s, remaining 0.00 s)
    vacuum...
    set primary keys...
    done.

    执行完成后,进入测试库TEST,发现创建了4个表:

    TEST=# dt
                 List of relations
     Schema |       Name       | Type  | Owner
    --------+------------------+-------+--------
     PUBLIC | KBBENCH_ACCOUNTS | table | SYSTEM
     PUBLIC | KBBENCH_BRANCHES | table | SYSTEM
     PUBLIC | KBBENCH_HISTORY  | table | SYSTEM
     PUBLIC | KBBENCH_TELLERS  | table | SYSTEM

    压力测试

    使用命令:

    ./kbbench -USYSTEM -p50001 -r -j 2 -c 4 -T 30 TEST

    -r
    --report-latencies

    在基准结束后,报告平均的每个命令的每语句等待时间(从客户端的角度来说是执行时间)。

    -j

    threads
    --jobs=threads

    pgbench中的工作者线程数量。在多 CPU 机器上使用多于一个线程会有用。客户端会尽可能均匀地分布到可用的线程上。默认为 1。

    -c

    clients
    --client=clients

    模拟的客户端数量,也就是并发数据库会话数量。默认为 1。 

    -T

    seconds
    --time=seconds

    运行测试这么多秒,而不是为每个客户端运行固定数量的事务。-t和-T是互斥的。 

    [cli@localhost bin]$ ./kbbench -USYSTEM -p50001 -r -j 2 -c 4 -T 30 TEST
    Password:
    starting vacuum...end.
    transaction type: <builtin: TPC-B (sort of)>
    scaling factor: 20
    query mode: simple
    number of clients: 4
    number of threads: 2
    duration: 30 s
    number of transactions actually processed: 24657
    latency average = 4.867 ms
    tps = 821.800590 (including connections establishing)
    tps = 822.087874 (excluding connections establishing)
    script statistics:
     - statement latencies in milliseconds:
             0.004  set aid random(1, 100000 * :scale)
             0.001  set bid random(1, 1 * :scale)
             0.001  set tid random(1, 10 * :scale)
             0.001  set delta random(-5000, 5000)
             0.299  BEGIN;
             0.745  UPDATE kbbench_accounts SET abalance = abalance + :delta WHERE aid = :aid;
             0.605  SELECT abalance FROM kbbench_accounts WHERE aid = :aid;
             0.746  UPDATE kbbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid;
             0.737  UPDATE kbbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid;
             0.578  INSERT INTO kbbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);
             1.127  END;
    但行好事,莫问前程
  • 相关阅读:
    spring源码学习(一) 小小少年
    mysql索引 小小少年
    Java集合框架个人学习笔记 小小少年
    记录一些自己百度到的问题解决方法
    基于内容的医学图像总结
    黑客与画家 第一章
    问题,不是逃避的
    黑客与画家 第二章
    记录最近一周的感受
    暗时间之体会
  • 原文地址:https://www.cnblogs.com/mingfan/p/12662898.html
Copyright © 2011-2022 走看看