sysbench 数据库性能测试

Mac上安装sysbench测试工具

brew install sysbench

测试sysbench 是否安装成功

//执行这条指令
sysbench cpu --cpu-max-prime=10000 run sysbench 1.0.17 (using bundled LuaJIT 2.1.0-beta2) Running the test with following options:
Number of threads: 1
Initializing random number generator from current time Prime numbers limit: 10000 Initializing worker threads... Threads started! CPU speed:
events per second: 859.16 General statistics:
total time: 10.0008s
total number of events: 8594 Latency (ms):
min: 1.10
avg: 1.16
max: 24.47
95th percentile: 1.32
sum: 9990.99 Threads fairness:
events (avg/stddev): 8594.0000/0.00
execution time (avg/stddev): 9.9910/0.00

sysbench能支持哪些性能指标测试

sysbench支持以下几种测试模式:

1、CPU运算性能
2、磁盘IO性能
3、调度程序性能
4、内存分配及传输速度
5、POSIX线程性能
6、数据库性能(OLTP基准测试)
目前sysbench主要支持 mysql,drizzle,pgsql,oracle 等几种数据库。

cpu 运算性能测试

sysbench cpu --cpu-max-prime=10000 run

sysbench 1.0.17 (using bundled LuaJIT 2.1.0-beta2)

Running the test with following options:
Number of threads: 1
Initializing random number generator from current time Prime numbers limit: 10000 Initializing worker threads... Threads started! CPU speed:
events per second: 859.16 General statistics:
total time: 10.0008s
total number of events: 8594 Latency (ms):
min: 1.10
avg: 1.16
max: 24.47
95th percentile: 1.32
sum: 9990.99 Threads fairness:
events (avg/stddev): 8594.0000/0.00
execution time (avg/stddev): 9.9910/0.00

磁盘Io测试

第一步准备阶段,生成测试用到的数据文件,生成的数据文件至少要比内存大

//创建测试文件,后续run操作会读写这个文件 这里文件大小为10G
sysbench --test=fileio --file-total-size=10G prepare ARNING: the --test option is deprecated. You can pass a script name or path on the command line without any options.
sysbench 1.0.17 (using bundled LuaJIT 2.1.0-beta2) 128 files, 81920Kb each, 10240Mb total
Creating files for the test...
Extra file open flags: (none)
Creating file test_file.0
Creating file test_file.1
Creating file test_file.2
Creating file test_file.3
Creating file test_file.4
Creating file test_file.5
Creating file test_file.6
Creating file test_file.7
Creating file test_file.8
Creating file test_file.9
Creating file test_file.10
Creating file test_file.11
Creating file test_file.12
Creating file test_file.13
Creating file test_file.14
Creating file test_file.15
Creating file test_file.16
Creating file test_file.17
Creating file test_file.18
Creating file test_file.19
Creating file test_file.20
Creating file test_file.21
Creating file test_file.22
Creating file test_file.23
Creating file test_file.24
Creating file test_file.25
Creating file test_file.26
Creating file test_file.27
Creating file test_file.28
Creating file test_file.29
Creating file test_file.30
Creating file test_file.31
Creating file test_file.32
Creating file test_file.33
Creating file test_file.34
Creating file test_file.35
Creating file test_file.36
Creating file test_file.37
Creating file test_file.38
Creating file test_file.39
Creating file test_file.40
Creating file test_file.41
Creating file test_file.42
Creating file test_file.43
Creating file test_file.44
Creating file test_file.45
Creating file test_file.46
Creating file test_file.47
Creating file test_file.48
Creating file test_file.49
Creating file test_file.50
Creating file test_file.51
Creating file test_file.52
Creating file test_file.53
Creating file test_file.54
Creating file test_file.55
Creating file test_file.56
Creating file test_file.57
Creating file test_file.58
Creating file test_file.59
Creating file test_file.60
Creating file test_file.61
Creating file test_file.62
Creating file test_file.63
Creating file test_file.64
Creating file test_file.65
Creating file test_file.66
Creating file test_file.67
Creating file test_file.68
Creating file test_file.69
Creating file test_file.70
Creating file test_file.71
Creating file test_file.72
Creating file test_file.73
Creating file test_file.74
Creating file test_file.75
Creating file test_file.76
Creating file test_file.77
Creating file test_file.78
Creating file test_file.79
Creating file test_file.80
Creating file test_file.81
Creating file test_file.82
Creating file test_file.83
Creating file test_file.84
Creating file test_file.85
Creating file test_file.86
Creating file test_file.87
Creating file test_file.88
Creating file test_file.89
Creating file test_file.90
Creating file test_file.91
Creating file test_file.92
Creating file test_file.93
Creating file test_file.94
Creating file test_file.95
Creating file test_file.96
Creating file test_file.97
Creating file test_file.98
Creating file test_file.99
Creating file test_file.100
Creating file test_file.101
Creating file test_file.102
Creating file test_file.103
Creating file test_file.104
Creating file test_file.105
Creating file test_file.106
Creating file test_file.107
Creating file test_file.108
Creating file test_file.109
Creating file test_file.110
Creating file test_file.111
Creating file test_file.112
Creating file test_file.113
Creating file test_file.114
Creating file test_file.115
Creating file test_file.116
Creating file test_file.117
Creating file test_file.118
Creating file test_file.119
Creating file test_file.120
Creating file test_file.121
Creating file test_file.122
Creating file test_file.123
Creating file test_file.124
Creating file test_file.125
Creating file test_file.126
Creating file test_file.127
10737418240 bytes written in 31.64 seconds (323.62 MiB/sec).

文件的读写模式如下

  • seqwr 顺序写入
  • seqrewr 顺序重写
  • seqrd 顺序读取
  • rndrd 随机读取
  • rndwr 随机写入
  • rndrw 混合随机读/写

第二步 测试写入数据

//执行混合随机测试//随机写入时间为300秒
sysbench --test=fileio --file-total-size=10G --file-test-mode=rndrw --time=300 --max-requests=0 run WARNING: the --test option is deprecated. You can pass a script name or path on the command line without any options.
sysbench 1.0.17 (using bundled LuaJIT 2.1.0-beta2) Running the test with following options:
Number of threads: 1
Initializing random number generator from current time Extra file open flags: (none)
128 files, 80MiB each
10GiB total file size
Block size 16KiB
Number of IO requests: 0
Read/Write ratio for combined random IO test: 1.50
Periodic FSYNC enabled, calling fsync() each 100 requests.
Calling fsync() at the end of test, Enabled.
Using synchronous I/O mode
Doing random r/w test
Initializing worker threads... Threads started! File operations:
reads/s: 3688.61
writes/s: 2459.07
fsyncs/s: 7869.33 Throughput:
read, MiB/s: 57.63
written, MiB/s: 38.42 General statistics:
total time: 300.0014s
total number of events: 4205035 Latency (ms):
min: 0.00
avg: 0.07
max: 153.05
95th percentile: 0.20
sum: 295336.94 Threads fairness:
events (avg/stddev): 4205035.0000/0.00
execution time (avg/stddev): 295.3369/0.00

第三步,清除测试文件

sysbench --test=fileio --file-total-size=10G cleanup

数据库性能(OLTP基准测试)

查看一下:

/usr/local/Cellar/sysbench/1.0.17/share/sysbench目录下的lua文件

-rwxr-xr-x  1 xxydliuyss  staff   1.4K  3 15 20:16 bulk_insert.lua
-rw-r--r-- 1 xxydliuyss staff 14K 3 15 20:16 oltp_common.lua
-rwxr-xr-x 1 xxydliuyss staff 1.3K 3 15 20:16 oltp_delete.lua
-rwxr-xr-x 1 xxydliuyss staff 2.4K 3 15 20:16 oltp_insert.lua
-rwxr-xr-x 1 xxydliuyss staff 1.2K 3 15 20:16 oltp_point_select.lua
-rwxr-xr-x 1 xxydliuyss staff 1.6K 3 15 20:16 oltp_read_only.lua
-rwxr-xr-x 1 xxydliuyss staff 1.8K 3 15 20:16 oltp_read_write.lua
-rwxr-xr-x 1 xxydliuyss staff 1.1K 3 15 20:16 oltp_update_index.lua
-rwxr-xr-x 1 xxydliuyss staff 1.1K 3 15 20:16 oltp_update_non_index.lua
-rwxr-xr-x 1 xxydliuyss staff 1.4K 3 15 20:16 oltp_write_only.lua
-rwxr-xr-x 1 xxydliuyss staff 1.9K 3 15 20:16 select_random_points.lua
-rwxr-xr-x 1 xxydliuyss staff 2.1K 3 15 20:16 select_random_ranges.lua
drwxr-xr-x 5 xxydliuyss staff 160B 8 28 18:53 tests

0.5版本之后就取消了—test=oltp的命令,改用直接调用脚本的方式

如何查看脚本的参数和语法

sysbench --test=/usr/local/Cellar/sysbench/1.0.17/share/sysbench/oltp_common.lua help

oltp_common.lua options:
--auto_inc[=on|off] Use AUTO_INCREMENT column as Primary Key (for MySQL), or its alternatives in other DBMS. When disabled, use client-generated IDs [on]
--create_secondary[=on|off] Create a secondary index in addition to the PRIMARY KEY [on]
--delete_inserts=N Number of DELETE/INSERT combinations per transaction [1]
--distinct_ranges=N Number of SELECT DISTINCT queries per transaction [1]
--index_updates=N Number of UPDATE index queries per transaction [1]
--mysql_storage_engine=STRING Storage engine, if MySQL is used [innodb]
--non_index_updates=N Number of UPDATE non-index queries per transaction [1]
--order_ranges=N Number of SELECT ORDER BY queries per transaction [1]
--pgsql_variant=STRING Use this PostgreSQL variant when running with the PostgreSQL driver. The only currently supported variant is 'redshift'. When enabled, create_secondary is automatically disabled, and delete_inserts is set to 0
--point_selects=N Number of point SELECT queries per transaction [10]
--range_selects[=on|off] Enable/disable all range SELECT queries [on]
--range_size=N Range size for range SELECT queries [100]
--secondary[=on|off] Use a secondary index in place of the PRIMARY KEY [off]
--simple_ranges=N Number of simple range SELECT queries per transaction [1]
--skip_trx[=on|off] Don't start explicit transactions and execute all queries in the AUTOCOMMIT mode [off]
--sum_ranges=N Number of SELECT SUM() queries per transaction [1]
--table_size=N Number of rows per table [10000]
--tables=N Number of tables [1]

第一步准备数据库

mysqladmin create test

第二步 准备测试数据

//准备十万条测试数据的量
sysbench --test=/usr/local/Cellar/sysbench/1.0.17/share/sysbench/oltp_common.lua --table-size=100000 --mysql-host=k8s-n1 --mysql-port=3307 --mysql-user=root --mysql-password=123456 --mysql-db=test prepare

第三步测试

进行插入性能测试

//插入10万条数据,8个线程执行,每10秒中报告一次
sysbench --test=/usr/local/Cellar/sysbench/1.0.17/share/sysbench/oltp_insert.lua --table-size=100000 --mysql-host=k8s-n1 --mysql-port=3307 --mysql-user=root --mysql-password=123456 --mysql-db=test --threads=8 --max-requests=0 --report-interval=10 --time=300 run

结果

sysbench 1.0.17 (using bundled LuaJIT 2.1.0-beta2)

Running the test with following options:
Number of threads: 8
Report intermediate results every 10 second(s)
Initializing random number generator from current time Initializing worker threads... Threads started! [ 10s ] thds: 8 tps: 1239.65 qps: 1239.65 (r/w/o: 0.00/1239.65/0.00) lat (ms,95%): 9.39 err/s: 0.00 reconn/s: 0.00
[ 20s ] thds: 8 tps: 1073.90 qps: 1073.90 (r/w/o: 0.00/1073.90/0.00) lat (ms,95%): 13.70 err/s: 0.00 reconn/s: 0.00
[ 30s ] thds: 8 tps: 1008.58 qps: 1008.58 (r/w/o: 0.00/1008.58/0.00) lat (ms,95%): 13.46 err/s: 0.00 reconn/s: 0.00
[ 40s ] thds: 8 tps: 1039.27 qps: 1039.27 (r/w/o: 0.00/1039.27/0.00) lat (ms,95%): 12.75 err/s: 0.00 reconn/s: 0.00
[ 50s ] thds: 8 tps: 958.69 qps: 958.69 (r/w/o: 0.00/958.69/0.00) lat (ms,95%): 15.55 err/s: 0.00 reconn/s: 0.00
[ 60s ] thds: 8 tps: 954.88 qps: 954.88 (r/w/o: 0.00/954.88/0.00) lat (ms,95%): 14.46 err/s: 0.00 reconn/s: 0.00
[ 70s ] thds: 8 tps: 954.40 qps: 954.40 (r/w/o: 0.00/954.40/0.00) lat (ms,95%): 14.46 err/s: 0.00 reconn/s: 0.00
[ 80s ] thds: 8 tps: 897.28 qps: 897.28 (r/w/o: 0.00/897.28/0.00) lat (ms,95%): 16.41 err/s: 0.00 reconn/s: 0.00
[ 90s ] thds: 8 tps: 840.91 qps: 840.91 (r/w/o: 0.00/840.91/0.00) lat (ms,95%): 16.71 err/s: 0.00 reconn/s: 0.00
[ 100s ] thds: 8 tps: 728.62 qps: 728.62 (r/w/o: 0.00/728.62/0.00) lat (ms,95%): 22.28 err/s: 0.00 reconn/s: 0.00
[ 110s ] thds: 8 tps: 733.59 qps: 733.59 (r/w/o: 0.00/733.59/0.00) lat (ms,95%): 20.00 err/s: 0.00 reconn/s: 0.00

结果解读

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%以上的响应时长统计
[ 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%)
OLTP test statistics:
queries performed:
read: 938224 -- 读总数
write: 268064 -- 写总数
other: 134032 -- 其他操作总数(SELECT、INSERT、UPDATE、DELETE之外的操作,例如COMMIT等)
total: 1340320 -- 全部总数
transactions: 67016 (1116.83 per sec.) -- 总事务数(每秒事务数)
deadlocks: 0 (0.00 per sec.) -- 发生死锁总数
read/write requests: 1206288 (20103.01 per sec.) -- 读写总数(每秒读写次数)
other operations: 134032 (2233.67 per sec.) -- 其他操作总数(每秒其他操作次数) General statistics: -- 一些统计结果
total time: 60.0053s -- 总耗时
total number of events: 67016 -- 共发生多少事务数
total time taken by event execution: 479.8171s -- 所有事务耗时相加(不考虑并行因素)
response time: -- 响应时长统计
min: 4.27ms -- 最小耗时
avg: 7.16ms -- 平均耗时
max: 13.80ms -- 最长耗时
approx. 99 percentile: 9.88ms -- 超过99%平均耗时 Threads fairness:
events (avg/stddev): 8377.0000/44.33
execution time (avg/stddev): 59.9771/0.00 其他信息可以参考这个连接:
http://www.linuxidc.com/Linux/2017-04/142856.htm

其他使用参数可以用help查看。

如果需要更加详细关于sysbench 可以查看http://blog.itpub.net/29773961/viewspace-1849676

详细介绍

SysBench 使用指南

更新时间:2018-09-29 16:44:06

[本页目录](javascript:void(0))

DRDS 性能测试使用 SysBench 作为压测工具,本文介绍 SysBench 的使用方法。

安装

测试使用的是 SysBench 0.5 版本,安装方法如下:

git clone https://github.com/akopytov/sysbench.gitgit checkout 0.5yum -y install make automake libtool pkgconfig libaio-develyum -y install mariadb-devel./autogen.sh./configuremake -jmake install

注意:以上是在压测 ECS 上的安装方法,如果需要安装到其他操作系统,参考 SysBench 官方文档

安装完毕后,所有自带压测脚本都在 /usr/local/share/sysbench 目录下,DRDS 性能测试将使用该目录下的脚本。除此之外,也可以在源码目录 sysbench/sysbench/tests/db 下找到对应的压测脚本。

使用简介

常用测试模型

SysBench 通过脚本定义了若干常用的压测模型,以下简单介绍几个常用模型:

压测模型 描述
bulk_inert.lua 批量插入数据
insert.lua 单值插入数据
delete.lua 删除数据
oltp.lua 混合读写测试,读写比例14:4
select.lua 简单的主键查询

表结构

对 DRDS 进行测试时,对 SysBench 的测试表稍作改造,将其修改为分库分表的形式,测试表的建表语句如下:

CREATE TABLE `sbtest1` (  `id` int(10) unsigned NOT NULL,  `k` int(10) unsigned NOT NULL DEFAULT '0',  `c` char(120) NOT NULL DEFAULT '',  `pad` char(60) NOT NULL DEFAULT '',  KEY `xid` (`id`),  KEY `k_1` (`k`)) dbpartition by hash(`id`) tbpartition by hash(`id`) tbpartitions 4

以上建表语句中,分库分表数可自行调整,该表会在准备数据阶段自动生成,无需手动创建。

测试命令及参数

使用 SysBench 进行压测,通常分为三个步骤:

  • prepare,准备数据
  • run,运行测试模型
  • cleanup,清理测试数据

通常仅需准备一次数据,在此数据基础上测试各种模型即可。

常用参数

SysBench 中常用的参数如下:

  • --oltp-tables-count=1:表数量
  • --oltp-table-size=10000000:每个表产生的记录行数
  • --oltp-read-only=off:是否生成只读SQL,默认 off,如果设置为 on,则 oltp 模型不会生成 update, delete, insert 的 SQL 语句
  • --oltp-skip-trx=[on|off]:省略 BEGIN / COMMIT 语句。默认是 off
  • --rand-init=on:是否随机初始化数据,如果不随机化那么初始好的数据每行内容除了主键不同外其他完全相同
  • --num-threads=12: 并发线程数,可以理解为模拟的客户端并发连接数
  • --report-interval=10:表示每 10s 输出一次性能数据
  • --max-requests=0:压力测试产生请求的总数,如果以下面的 max-time 来记,这个值设为 0 即可
  • --max-time=120:测试的持续时间
  • --oltp_auto_inc=off:id 是否为自增列
  • --oltp_secondary=on:将 id 设置为非主键防止主键冲突
  • --oltp_range_size=5: 连续取值 5 个,必定走到 5 个分片
  • --mysql_table_options='dbpartition by hash(id) tbpartition by hash(id) tbpartitions 2':DRDS 支持拆分表,在建表的时候需要指定拆分方式

示例命令

以下是示例命令,供参考:

准备数据:

sysbench --test='/usr/local/share/sysbench/oltp.lua' --oltp_tables_count=1 --report-interval=10 --oltp-table-size=10000000  --mysql-user=*** --mysql-password=*** --mysql-table-engine=innodb  --rand-init=on  --mysql-host=**** --mysql-port=*** --mysql-db=*** --max-time=300 --max-requests=0   --oltp_skip_trx=on --oltp_auto_inc=off  --oltp_secondary=on --oltp_range_size=5 --mysql_table_options='dbpartition by hash(`id`) tbpartition by hash(`id`) tbpartitions 2' --num-threads=200   prepare

执行测试

sysbench --test='/usr/local/share/sysbench/oltp.lua' --oltp_tables_count=1 --report-interval=10 --oltp-table-size=10000000  --mysql-user=*** --mysql-password=*** --mysql-table-engine=innodb  --rand-init=on  --mysql-host=**** --mysql-port=*** --mysql-db=*** --max-time=300 --max-requests=0   --oltp_skip_trx=on --oltp_auto_inc=off --oltp_secondary --oltp_range_size=5 --mysql_table_options='dbpartition by hash(`id`) tbpartition by hash(`id`) tbpartitions 2' --num-threads=200 run

清理环境

sysbench --test='/usr/local/share/sysbench/oltp.lua' --oltp_tables_count=1 --report-interval=10 --oltp-table-size=10000000  --mysql-user=*** --mysql-password=*** --mysql-table-engine=innodb  --rand-init=on  --mysql-host=**** --mysql-port=*** --mysql-db=*** --max-time=300 --max-requests=0   --oltp_skip_trx=on --oltp_auto_inc=off --oltp_secondary --oltp_range_size=5 --mysql_table_options='dbpartition by hash(`id`) tbpartition by hash(`id`) tbpartitions 2' --num-threads=200 cleanup

sysbench自定义lua脚本实现实际的业务逻辑压力测试

sysbench自定义lua脚本实现实际的业务逻辑压力测试

使用sysbench进行mysql的oltp测试,一般的测试在sysbench中在tests/db中提供了一个oltp.lua脚本可以进行oltp的压力测试。

但不能完全模拟自己实际业务的压力测试,不同的业务,数据结构,数据量都是不一样的,为了更接近实际业务的读写压力测试,就得自己写lua脚本,然后通过sysbench进行压力测试。

写这个lua脚本很简单,只需要会写lua脚本就可以了。 写这个lua脚本很简单,只需要会写lua脚本就可以了。

1、首先收集实际业务的访问数据库的sql;
2、准备一台恢复好的备份库(从线上导一个)
3、将收集的sql写在lua脚本里(具体如何写,后面举个例子)4、通过sysbench的--test参数和--mysql-db参数进行测试(这里就不需要prepare了,直接run就行)
4、通过sysbench的--test参数和--mysql-db参数进行测试(这里就不需要prepare了,直接run就行)

举个小例子

模拟实际业务环境: 模拟实际业务环境:

CREATE TABLE `t1` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=10101 DEFAULT CHARSET=utf8
) ENGINE=InnoDB AUTO_INCREMENT=10101 DEFAULT CHARSET=utf8

插入模拟的际业务数据:

delimiter $$
create procedure add_data(in maxnum int)
begin
declare i int default 0;
declare s varchar(500);
while(i<maxnum) do
select concat("abcdedsfsfsdfsfsf",i) into s;
insert into t1(name)values(s);
set i=i+1;
end while;
end $$
delimiter ;call add_data(10000); call add_data(10000);

准备lua脚本:[root@sever3 db]# cat test.lua

function thread_init(thread_id)
-- set_vars()
db_connect()
end function event(thread_id)
local table_name
local rs
table_name = "t1"
db_query("begin")
for i=1, 10000 do
rs = db_query("SELECT name FROM ".. table_name .." WHERE id=" .. i)
endend
end

set_vars() 如果需要使用更多的参数,需要执行这个,前面需要引用下common.lua

db_connect() 是连接数据库的,这个是sysbench里的函数,不管那么多,直接用就行。

thread_init() 第一个调用的lua函数

event(thread_id) 可以把sql逻辑写到这里, --num-threads多少个,就会同时调用多少个

然后进行压测就ok

[root@sever3 sysbench]# ./sysbench --mysql-socket=/data/mysql_3309/mysql.sock --test=tests/db/test.lua --mysql-user=root --num-threads=12 --report-interval=10 --rand-type=uniform --max-time=30 --max-requests=0 --percentile=99 --mysql-db=test run
sysbench 0.5: multi-threaded system evaluation benchmark Running the test with following options:
Number of threads: 12
Report intermediate results every 10 second(s)
Random number generator seed is 0 and will be ignored Threads started! [ 10s] threads: 12, tps: 0.00, reads/s: 64131.41, writes/s: 0.00, response time: 3291.51ms (99%)
[ 20s] threads: 12, tps: 0.00, reads/s: 79980.83, writes/s: 0.00, response time: 1947.61ms (99%)
[ 30s] threads: 12, tps: 0.00, reads/s: 78354.15, writes/s: 0.00, response time: 2418.21ms (99%)
OLTP test statistics:
queries performed:
read: 2280000
write: 0
other: 228
total: 2280228
transactions: 0 (0.00 per sec.)
deadlocks: 0 (0.00 per sec.)
read/write requests: 2280000 (72705.35 per sec.)
other operations: 228 (7.27 per sec.) General statistics:
total time: 31.3595s
total number of events: 228
total time taken by event execution: 368.0393s
response time:
min: 985.61ms
avg: 1614.21ms
max: 3756.13ms
approx. 99 percentile: 3289.54ms Threads fairness:
events (avg/stddev): 19.0000/3.83
execution time (avg/stddev): 30.6699/0.42

sysbench具体的使用、结果解读可以参数下

http://imysql.com/2014/10/17/sysbench-full-user-manual.shtml

别人的demo

pathtest = string.match(test, "(.*/)") or ""

dofile(pathtest .. "common.lua")

function thread_init(thread_id)
set_vars() if (db_driver == "mysql" and mysql_table_engine == "myisam") then
begin_query = "LOCK TABLES sbtest WRITE"
commit_query = "UNLOCK TABLES"
else
begin_query = "BEGIN"
commit_query = "COMMIT"
end
end function event(thread_id)
local vid1
local vid2
local vid3
local vid4
local vid5
local vk
local vxv
vid1 = sb_rand_uniform(1,10000)
vid2 = sb_rand_uniform(1,10000)
vid3 = sb_rand_uniform(1,10000)
vid4 = sb_rand_uniform(1,10000)
vid5 = sb_rand_uniform(1,10000)
vk = sb_rand_uniform(10,10000)
vxv = sb_rand_str([[###########-###########-###########-###########-###########]])
rs = db_query("SELECT pad FROM test1 WHERE id=" .. vid1)
rs = db_query("SELECT pad FROM test2 WHERE id=" .. vid2)
rs = db_query("SELECT pad FROM test3 WHERE id=" .. vid3) db_query(begin_query)
rs = db_query("update test4 set k=k-1 where id=" .. vid4)
rs = db_query("update test5 set k=k+1 where id=" .. vid5)
db_query(commit_query) rs = db_query("insert into test6 (k,xv) values " .. string.format("(%d , '%s')",vk,vxv)); end

利用sysbench快速插入海量数据到数据库

1.准备两个表,

CREATE TABLE `employ` (
`id` bigint(20) NOT NULL COMMENT '员工编号',
`name` varchar(48) NOT NULL COMMENT '名字',
`departmentId` bigint(10) NOT NULL COMMENT '部门编号',
`datasourceId` varchar(64) NOT NULL COMMENT '数据存储位置',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `employExt` (
`userid` bigint(20) NOT NULL COMMENT '员工编号',
`username` varchar(48) NOT NULL COMMENT '名字',
`address` varchar(255) NOT NULL COMMENT '地址',
`phone` char(11) NOT NULL COMMENT '号码',
`cardId` char(18) NOT NULL COMMENT '身份证号码',
PRIMARY KEY (`userid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

第二步编写lua脚本

#!/usr/bin/env sysbench

require("oltp_common")

function thread_init()
if (db_driver == "mysql" and mysql_table_engine == "myisam") then
begin_query = "LOCK TABLES sbtest WRITE"
commit_query = "UNLOCK TABLES"
else
begin_query = "BEGIN"
commit_query = "COMMIT"
end
drv = sysbench.sql.driver()
con = drv:connect()
stmt = {}
param = {} for t = 1, sysbench.opt.tables do
stmt[t] = {}
param[t] = {}
end -- This function is a 'callback' defined by individual benchmark scripts
prepare_statements()
end function prepare_statements()
-- We do not use prepared statements here, but oltp_common.sh expects this
-- function to be defined
end function event(thread_id)
local table_name = "employ"
local table1_name = "employExt"
local employ_name = get_c_value()
local departmentId = sb_rand_uniform(10,10000)
local datasourceId = "db1" if (sysbench.opt.auto_inc) then
i = 0
else
-- Convert a uint32_t value to SQL INT
i = sysbench.rand.unique() - 2147483648
end
con:query(string.format("INSERT INTO %s (id, name, departmentId, datasourceId) VALUES " ..
"(%d, %s, '%d', '%s')",
table_name, i, employ_name, departmentId, datasourceId))
end

sysbench 数据库性能测试工具的使用的更多相关文章

  1. 数据库性能测试:sysbench用法详解

    1.简介和安装 sysbench是一个很不错的数据库性能测试工具. 官方站点:https://github.com/akopytov/sysbench/ rpm包下载:https://packagec ...

  2. sysbench - 数据库功能及性能测试工具

    sysbench 的 GitHub 参考资料 1.0 之后的版本使用方法跟之前的有所区别,下面所有内容基于 1.0.9 版本. 另外,为了方便管理测试,最好不要通过命令直接运行测试,而是写成脚本自动化 ...

  3. 开源多线程性能测试工具-sysbench

    导读 sysbench是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试.数据库目前支持MySQL/Oracle/PostgreSQL.本文主要演示Mysql测试 ...

  4. MySQL性能测试工具sysbench的安装和使用

    sysbench是一个开源的.模块化的.跨平台的多线程性能测试工具,可以用来进行CPU.内存.磁盘I/O.线程.数据库的性能测试.目前支持的数据库有MySQL.Oracle和PostgreSQL.当前 ...

  5. Mysql多线程性能测试工具sysbench 安装、使用和测试

    From:http://www.cnblogs.com/zhoujinyi/archive/2013/04/19/3029134.html 摘要:      sysbench是一个开源的.模块化的.跨 ...

  6. Linux 性能测试工具 sysbench 的安装与简单使用

    文章目录 Linux 性能测试工具 sysbench 的安装与简单使用        一 背景        二 实验环境            2.1 操作系统            2.2 其他配 ...

  7. [数据库]000 - 🍳Sysbench 数据库压力测试工具

    000 - Sysbench 数据库压力测试工具 sysbench 是一个开源的.模块化的.跨平台的多线程性能测试工具,可以用来进行CPU.内存.磁盘I/O.线程.数据库的性能测试.目前支持的数据库有 ...

  8. 数据库之redis篇(2)—— redis配置文件,常用命令,性能测试工具

    redis配置 如果你是找网上的其他教程来完成以上操作的话,相信你见过有的启动命令是这样的: 启动命令带了这个参数:redis.windows.conf,由于我测试环境是windows平台,所以是这个 ...

  9. Linux系统性能测试工具(四)——CPU性能测试工具之super_pi、sysbench

    本文介绍关于Linux系统(适用于centos/ubuntu等)的CPU性能测试工具-sysbench.CPU性能测试工具包括: super_pi: sysbench——不仅可以测试CPU性能,而且可 ...

随机推荐

  1. nginx upstream 容错机制

    熟练掌握Nginx负载均衡的使用对运维人员来说是极其重要的!下面针对Nignx负载均衡upstream容错机制的使用做一梳理性说明: 一.nginx的upstream容错 1)nginx 判断节点失效 ...

  2. golang struct组合,转型问题请教

    type Action interface { OnHurt2(other Action) GetDamage() int } type Base struct { atk, hp int } fun ...

  3. 机器学习实战笔记——KNN

    机器学习实战——读书笔记 书籍奉上

  4. Ultimate Guide to Line For Business (May 2019)

    Ultimate Guide to Line For Business (May 2019) By Iaroslav Kudritskiy February 4, 2019 No Comments I ...

  5. LIBS+=(20191017)

    1.方式一:(ZC:"LIBPATH"中写路径,"LIBS"中写lib文件名[不带后缀]) LIBPATH += F:/ZC_IDE/VC_3rd/libxml ...

  6. 在C#中简单使用gRPC

    一.引言 本文采用gRPC官方提供的一个教程例子,通过这个例子可以学习到在.proto文件中定义服务.使用protocol buffer编译器生成服务器和客户端代码.使用C#gRPC API为您的服务 ...

  7. error: audit:backlog limit exceeded

    报错场景:telnet.ping.ftp都通的情况下,无法ssh服务器 原因:audit缓冲区设置过小,服务器默认缓冲区大小为320kb 解决办法:可通过auditctl -b 8192设定缓冲区大小 ...

  8. python3连接oracle数据库

    声明:python,cx_Oracle和instantclient的版本应一致 我这里使用的版本是python3.6 64位 ,cx_Oracle-5.3-11g.win-amd64-py3.6-2和 ...

  9. flink两种安装方式

    Flink Standalone 集群 HA 配置 1. HA 集群环境规划 使用三台节点实现两主两从集群(由于笔记本性能限制,不能开启太多虚拟机,其实使用三 台和四台机器在安装配置上没有本质区别) ...

  10. 什么是DataV数据可视化

    DataV数据可视化是使用可视化大屏的方式来分析并展示庞杂数据的产品.DataV旨让更多的人看到数据可视化的魅力,帮助非专业的工程师通过图形化的界面轻松搭建专业水准的可视化应用,满足您会议展览.业务监 ...