benchyou is a benchmark tool for MySQL, similar Sysbench.
In addition to real-time monitoring TPS, she also monitors vmstat/iostat via SSH tunnel.
The idea of stat per operation is inspired by Mark Callaghan, Small Datum
time thds tps wtps rtps rio rio/op wio wio/op rMB rKB/op wMB wKB/op cpu/op freeMB cacheMB w-rsp(ms) r-rsp(ms) total-number [1s] [r:4,w:128,u:4,d:4] 33508 24056 9452 0 0.00 0 0.00 0.00 0.00 0.00 0.00 0.00 0 0 5.05 0.39 33508 time thds tps wtps rtps rio rio/op wio wio/op rMB rKB/op wMB wKB/op cpu/op freeMB cacheMB w-rsp(ms) r-rsp(ms) total-number [2s] [r:4,w:128,u:4,d:4] 29929 21287 8642 0 0.00 0 0.00 0.00 0.00 0.00 0.00 0.00 0 0 6.12 0.45 63437 time thds tps wtps rtps rio rio/op wio wio/op rMB rKB/op wMB wKB/op cpu/op freeMB cacheMB w-rsp(ms) r-rsp(ms) total-number [3s] [r:4,w:128,u:4,d:4] 27967 20215 7752 0 0.00 2472 0.09 0.00 0.00 25.57 0.94 6.22 6185 4570 6.51 0.51 91404 time thds tps wtps rtps rio rio/op wio wio/op rMB rKB/op wMB wKB/op cpu/op freeMB cacheMB w-rsp(ms) r-rsp(ms) total-number [4s] [r:4,w:128,u:4,d:4] 30072 21560 8512 0 0.00 2235 0.07 0.00 0.00 23.55 0.80 5.60 6174 4577 5.74 0.45 121476 time thds tps wtps rtps rio rio/op wio wio/op rMB rKB/op wMB wKB/op cpu/op freeMB cacheMB w-rsp(ms) r-rsp(ms) total-number [5s] [r:4,w:128,u:4,d:4] 32182 23609 8573 0 0.00 2810 0.09 0.00 0.00 29.55 0.94 5.91 6165 4584 5.45 0.46 153658 time thds tps wtps rtps rio rio/op wio wio/op rMB rKB/op wMB wKB/op cpu/op freeMB cacheMB w-rsp(ms) r-rsp(ms) total-number [6s] [r:4,w:128,u:4,d:4] 34548 24771 9777 0 0.00 2823 0.08 0.00 0.00 29.28 0.87 5.80 6156 4590 5.14 0.40 188206 time thds tps wtps rtps rio rio/op wio wio/op rMB rKB/op wMB wKB/op cpu/op freeMB cacheMB w-rsp(ms) r-rsp(ms) total-number [7s] [r:4,w:128,u:4,d:4] 35185 24844 10341 0 0.00 2553 0.07 0.00 0.00 26.40 0.77 5.74 6145 4596 5.20 0.38 223391 time thds tps wtps rtps rio rio/op wio wio/op rMB rKB/op wMB wKB/op cpu/op freeMB cacheMB w-rsp(ms) r-rsp(ms) total-number [8s] [r:4,w:128,u:4,d:4] 36266 26030 10236 0 0.00 2880 0.08 0.00 0.00 29.84 0.84 5.86 6137 4603 4.95 0.38 259657 time thds tps wtps rtps rio rio/op wio wio/op rMB rKB/op wMB wKB/op cpu/op freeMB cacheMB w-rsp(ms) r-rsp(ms) total-number [9s] [r:4,w:128,u:4,d:4] 37414 26834 10580 0 0.00 3234 0.09 0.00 0.00 34.07 0.93 6.06 6125 4611 4.81 0.37 297071 time thds tps wtps rtps rio rio/op wio wio/op rMB rKB/op wMB wKB/op cpu/op freeMB cacheMB w-rsp(ms) r-rsp(ms) total-number [10s] [r:4,w:128,u:4,d:4] 36158 25845 10313 0 0.00 3329 0.09 0.00 0.00 35.53 1.01 6.43 6113 4619 4.98 0.38 333229 ----------------------------------------------------------------------------------------------avg--------------------------------------------------------------------------------------------- time tps wtps rtps rio rio/op wio wio/op rMB rKB/op wMB wKB/op cpu/op w-rsp(ms) r-rsp(ms) total-number [10s] 33642 24132 9509 0 0.00 332 0.00 0.00 0.00 3.55 0.01 0.07 [avg:0.53,min:0.00,max:149.79] [avg:0.04,min:0.00,max:27.63] 336420 the columns:
time: benchmark uptime thds: read threads and write(insert/update/delete) threads tps: transaction per second, including write and read wtps: write tps rtps: read tps rio: read io numbers per second rio/op: rio per operation wio: write io numbers per second wio/op: wio per operation rMB: amount data read from the device(megabytes) per second rKB/op: rKB per operation wMB: amount data written to the device(megabytes) per second wKB/op: wKB per operation cpu/op: CPU usecs per operation, measured by vmstat freeMB: the amount of idle memory(megabytes) cacheMB: the amount of memory(megabytes) used as cache w-rsp: the response time of one write operation, in millisecond r-rsp: the response time of one read operation, in millisecond total-number: the total number events $git clone https://github.com/xelabs/benchyou $cd benchyou $go build . $./bin/benchyou -h $ ./bin/benchyou -h Usage: benchyou [command] Available Commands: prepare cleanup random seq range Flags: --read-threads int number of read threads to use(Default 32) (default 32) --write-threads int number of write threads to use(Default 32) (default 32) --update-threads int number of update threads to use(Default 0) --delete-threads int number of delete threads to use(Default 0) --max-request uint limit for total requests, including write and read(Default 0, means no limits) --max-time int limit for total execution time in seconds(Default 3600) (default 3600) --mysql-db string MySQL database name(Default sbtest) (default "sbtest") --mysql-enable-xa int enable MySQL xa transaction for insertion {0|1} (Default 0) --mysql-host string MySQL server host(Default NULL) --mysql-password string MySQL password(Default benchyou) (default "benchyou") --mysql-port int MySQL server port(Default 3306) (default 3306) --mysql-range-order string range query sort the result-set in {ASC|DESC} (Default ASC) (default "ASC") --mysql-table-engine string storage engine to use for the test table {tokudb,innodb,...}(Default innodb) (default "innodb") --mysql-user string MySQL user(Default benchyou) (default "benchyou") --oltp-tables-count int number of tables to create(Default 8) (default 8) --rows-per-insert int #rows per insert(Default 1) (default 1) --batch-per-commit int #rows per transaction(Default 1) (default 1) --ssh-host string SSH server host(Default NULL, same as mysql-host) --ssh-password string SSH server password(Default benchyou) (default "benchyou") --ssh-port int SSH server port(Default 22) (default 22) --ssh-user string SSH server user(Default benchyou) (default "benchyou") prepare 64 tables: ./bin/benchyou --mysql-host=192.168.0.3 --mysql-user=benchyou --mysql-password=benchyou --oltp-tables-count=64 prepare cleanup 64 tables: ./bin/benchyou --mysql-host=192.168.0.3 --mysql-user=benchyou --mysql-password=benchyou --oltp-tables-count=64 cleanup random insert(Write/Read Ratio=128:8): ./bin/benchyou --mysql-host=192.168.0.3 --mysql-user=benchyou --mysql-password=benchyou --ssh-user=benchyou --ssh-password=benchyou --oltp-tables-count=64 --write-threads=128 --read-threads=8 --max-time=3600 random sequential insert(Write/Read Ratio=128:8): ./bin/benchyou --mysql-host=192.168.0.3 --mysql-user=benchyou --mysql-password=benchyou --ssh-user=benchyou --ssh-password=benchyou --oltp-tables-count=64 --write-threads=128 --read-threads=8 --max-time=3600 seq mix(Write/Read/Update/Delete Ratio=4:4:4:4): ./bin/benchyou --mysql-host=192.168.0.3 --mysql-user=benchyou --mysql-password=benchyou --ssh-user=benchyou --ssh-password=benchyou --oltp-tables-count=64 --write-threads=4 --read-threads=4 --update-threads=4 --delete-threads=4 --max-time=3600 random insert multiple rows(10 rows per insert): ./bin/benchyou --mysql-host=192.168.0.3 --mysql-user=benchyou --mysql-password=benchyou --ssh-user=benchyou --ssh-password=benchyou --oltp-tables-count=64 --write-threads=4 --rows-per-insert=10 --max-time=3600 random batch update(10 rows per transaction): ./bin/benchyou --mysql-host=192.168.0.3 --mysql-user=benchyou --mysql-password=benchyou --ssh-user=benchyou --ssh-password=benchyou --oltp-tables-count=64 --update-threads=4 --batch-per-commit=10 --max-time=3600 random query-range(Write/Read Ratio=128:8): ./bin/benchyou --mysql-host=192.168.0.3 --mysql-user=benchyou --mysql-password=benchyou --ssh-user=benchyou --ssh-password=benchyou --oltp-tables-count=64 --write-threads=128 --read-threads=8 --max-time=3600 --mysql-range-order=DESC range benchyou is released under the GPLv3. See LICENSE