myql基准测试工具Sysbench

一、Sysbench介绍

SysBench是一个模块化的、跨平台、多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况。它主要包括以下几种方式的测试:

1、cpu性能

2、磁盘io性能

3、调度程序性能

4、内存分配及传输速度

5、POSIX线程性能

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

Sysbench的oltp主要用于评估测试各种不同系统参数下的数据库负载情况。目前sysbench的数据库测试支持MySQL、PostgreSQL、Oracle。相比0.4版本,后续的版本oltp测试主要结合了lua脚本,不需要修改源码,通过自定义lua脚本就可以实现不同业务类型的测试。

二、Sysbench安装使用

如果没有什么特别需求,直接使用EPEL源安装Sysbench即可。

# yum -y install epel-release

# yum -y install sysbench

# sysbench --version

sysbench 1.0.9

# sysbench --help

Usage:

sysbench [options]... [testname] [command]

General options

--threads=N:创建测试线程的数量, 默认为[1]。

--events=N:事件最大数量,默认为[0] ,不限制。

--time=N:最大执行时间,单位是s,默认是[0] ,不限制。

--forced-shutdown=STRING:超过max-time强制中断, 默认是[off]。

--thread-stack-size=SIZE:每个线程的堆栈大小, 默认是[64k]。

--rate=N:average transactions rate. 0 for unlimited rate [0]。

--report-interval=N:报告中间统计信息间隔,0代表禁止,默认为[0]。

--report-checkpoints=[LIST,...]:转储完全统计信息并在指定时间点复位所有计数器,参数是逗号分隔值的列表,表示从必须执行报告检查点的测试开始所经过的时间(以秒为单位)。 默认情况下,报告检查点处于关闭状态[off]。

--debug[=on|off]:是否显示更多的调试信息,默认是[off]。

--validate[=on|off]:在可能情况下执行验证检查,默认是[off]。

--help[=on|off]:输出help信息,并退出。

--version[=on|off]:输出版本信息, 并退出。

--config-file=FILENAME:配置文件。

--tx-rate=N:deprecated alias for –rate[0].

--max-requests=N:deprecated alias for –events[0].

--max-time=N:deprecated alias for –time[0].

--num-threads=N:deprecated alias for –threads[1].

Pseudo-Random Numbers Generator options

--rand-type=STRING:分布的随机数{uniform(均匀分布),Gaussian(高斯分布),special(空间分布)},默认是special。

--rand-spec-iter=N:产生数的迭代次数,默认是12。

--rand-spec-pct=N:值的百分比被视为’special’ (for special distribution),默认是1。

--rand-spec-res=N:’special’的百分比值,默认是75。

--rand-seed=N:随机数发生器的种子,值为0时,将当前时间用作rng种子,默认值[0]。

--rand-pareto-h=N:参数h用于pareto分布[0.2]。

Log options

--verbosity=N:日志详细级别{5-调试, 0-仅重要消息},默认为[3]。

--percentile=N:在延迟统计数据中计算的百分点 (1-100),使用特殊值0来禁用百分比计算[95]。

--histogram[=on|off]:在报告中打印滞后时间直方图,默认为[off]。

Compiled-in database drivers

mysql:MySQL驱动。

pgsql:PostgreSQL驱动。

mysql options

--mysql-host=[LIST,...]:MySQL服务器地址[localhost]。

--mysql-port=[LIST,...]:MySQL服务器端口[3306]。

--mysql-socket=[LIST,...]:MySQL服务器的socket地址。

--mysql-user=STRING:MySQL服务器的用户名。

--mysql-password=STRING:MySQL用户名密码。

--mysql-db=STRING:MySQL数据库名称[sbtest]。

--mysql-compression[=on|off]:是否使用压缩[off]。

pgsql options

--pgsql-host=[LIST,...]:PostgreSQL服务器地址[localhost]。

--pgsql-port=[LIST,...]:PostgreSQL服务器端口[5432]。

--pgsql-user=STRING:PostgreSQL服务器的用户名。

--pgsql-password=STRING:PostgreSQL用户名密码。

--pgsql-db=STRING:PostgreSQL数据库名称[sbtest]。

Compiled-in tests

fileio:文件I/O测试。

cpu:CPU性能测试。

memory:内存速率测试。

threads:线程子系统性能测试。

mutex:互斥锁性能测试。

三、Sysbench压测MySQL

Sysbench压测MySQL流程:prepare(准备数据) -> run(运行测试) -> cleanup(清理数据)

下面是目前社区提供的lua脚步(安装sysbench默认自带)

/usr/share/sysbench/bulk_insert.lua

/usr/share/sysbench/oltp_common.lua

/usr/share/sysbench/oltp_delete.lua

/usr/share/sysbench/oltp_insert.lua

/usr/share/sysbench/oltp_point_select.lua

/usr/share/sysbench/oltp_read_only.lua

/usr/share/sysbench/oltp_read_write.lua

/usr/share/sysbench/oltp_update_index.lua

/usr/share/sysbench/oltp_update_non_index.lua

/usr/share/sysbench/oltp_write_only.lua

/usr/share/sysbench/select_random_points.lua

/usr/share/sysbench/select_random_ranges.lua

以oltp_read_only.lua为例压测MySQL:

准备数据:

# sysbench /usr/share/sysbench/oltp_read_only.lua --mysql-host=192.168.10.94 --mysql-port=3307 --mysql-user=root --mysql-password=‘000000‘ --mysql-db=sbtest --db-driver=mysql --tables=10 --table-size=1000000 --report-interval=10 --threads=128 --time=120 prepare

压测:

# sysbench /usr/share/sysbench/oltp_read_only.lua --mysql-host=192.168.10.94 --mysql-port=3307 --mysql-user=root --mysql-password=‘000000‘ --mysql-db=sbtest --db-driver=mysql --tables=10 --table-size=1000000 --report-interval=10 --threads=128 --time=120 run

结果:

sysbench 1.0.9 (using system LuaJIT 2.0.4)

Running the test with following options:

Number of threads: 128

Report intermediate results every 10 second(s)

Initializing random number generator from current time

Initializing worker threads...

Threads started!

[ 10s ] thds: 128 tps: 154.50 qps: 2564.53 (r/w/o: 2244.70/0.00/319.83) lat (ms,95%): 1129.24 err/s: 0.00 reconn/s: 0.00

[ 20s ] thds: 128 tps: 194.87 qps: 3113.62 (r/w/o: 2723.98/0.00/389.64) lat (ms,95%): 1109.09 err/s: 0.00 reconn/s: 0.00

[ 30s ] thds: 128 tps: 199.90 qps: 3207.14 (r/w/o: 2807.33/0.00/399.80) lat (ms,95%): 926.33 err/s: 0.00 reconn/s: 0.00

[ 40s ] thds: 128 tps: 195.06 qps: 3125.39 (r/w/o: 2735.27/0.00/390.12) lat (ms,95%): 1050.76 err/s: 0.00 reconn/s: 0.00

[ 50s ] thds: 128 tps: 218.04 qps: 3477.01 (r/w/o: 3041.13/0.00/435.88) lat (ms,95%): 831.46 err/s: 0.00 reconn/s: 0.00

[ 60s ] thds: 128 tps: 213.20 qps: 3415.43 (r/w/o: 2988.84/0.00/426.59) lat (ms,95%): 893.56 err/s: 0.00 reconn/s: 0.00

[ 70s ] thds: 128 tps: 217.60 qps: 3485.39 (r/w/o: 3049.89/0.00/435.50) lat (ms,95%): 861.95 err/s: 0.00 reconn/s: 0.00

[ 80s ] thds: 128 tps: 214.42 qps: 3423.17 (r/w/o: 2994.74/0.00/428.43) lat (ms,95%): 893.56 err/s: 0.00 reconn/s: 0.00

[ 90s ] thds: 128 tps: 199.67 qps: 3200.28 (r/w/o: 2800.75/0.00/399.53) lat (ms,95%): 909.80 err/s: 0.00 reconn/s: 0.00

[ 100s ] thds: 128 tps: 144.34 qps: 2311.44 (r/w/o: 2022.65/0.00/288.79) lat (ms,95%): 2279.14 err/s: 0.00 reconn/s: 0.00

[ 110s ] thds: 128 tps: 190.31 qps: 3045.26 (r/w/o: 2664.82/0.00/380.44) lat (ms,95%): 1032.01 err/s: 0.00 reconn/s: 0.00

[ 120s ] thds: 128 tps: 249.47 qps: 3988.58 (r/w/o: 3489.98/0.00/498.60) lat (ms,95%): 909.80 err/s: 0.00 reconn/s: 0.00

SQL statistics:

queries performed:

read:                            336420    //总select数量

write:                          0    //总update、insert、delete语句数量;

other:                          48060    //commit、unlock tables以及其他mutex的数量;

total:                          384480

transactions:                        24030  (198.93 per sec.)    //TPS;

queries:                            384480 (3182.80 per sec.)    //QPS;

ignored errors:                      0      (0.00 per sec.)    //忽略的错误数;

reconnects:                          0      (0.00 per sec.)

General statistics:

total time:                          120.7959s    //即time指定的压测实际;

total number of events:              24030    //总的事件数,一般与transactions相同;

Latency (ms):

min:                                82.09    //最小响应时间;

avg:                                641.06    //平均响应时间;

max:                              14581.38    //最大响应时间;

95th percentile:                  1013.60    //95%的语句的平均响应时间;

sum:                            15404637.08    //总响应时间;

Threads fairness:

events (avg/stddev):          187.7344/6.21

execution time (avg/stddev):  120.3487/0.22

我们一般关注的指标主要有:

response time avg:平均响应时间(后面的95%的大小可以通过–percentile=98的方式去更改)。

transactions:精确的说是这一项后面的TPS,但如果使用了–skip-trx=on,这项事务数为0,需要用total number of events去除以总时间,得到tps(其实还可以分为读tps和写tps)。

queries:用它除以总时间,得到吞吐量QPS。

当然还有一些系统层面的cpu,io,mem相关指标。

清除数据:

# sysbench /usr/share/sysbench/oltp_read_only.lua --mysql-host=192.168.10.94 --mysql-port=3307 --mysql-user=root --mysql-password=‘000000‘ --mysql-db=sbtest --db-driver=mysql --tables=10 --table-size=1000000 --report-interval=10 --threads=128 --time=120 cleanup

实际示例:

sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-password=‘z****8456‘ --mysql-db=sbtest --db-driver=mysql --tables=10 --table-size=100000 --report-interval=10 --threads=4 --time=3600 prepare
sysbench 1.0.9 (using system LuaJIT 2.0.4)

Initializing worker threads...

Creating table ‘sbtest3‘...
Creating table ‘sbtest2‘...Creating table ‘sbtest1‘...

Creating table ‘sbtest4‘...
Inserting 100000 records into ‘sbtest4‘
Inserting 100000 records into ‘sbtest2‘
Inserting 100000 records into ‘sbtest3‘
Inserting 100000 records into ‘sbtest1‘
Creating a secondary index on ‘sbtest3‘...
Creating a secondary index on ‘sbtest2‘...
Creating a secondary index on ‘sbtest4‘...
Creating table ‘sbtest7‘...
Creating a secondary index on ‘sbtest1‘...
Creating table ‘sbtest6‘...
Inserting 100000 records into ‘sbtest7‘
Inserting 100000 records into ‘sbtest6‘
Creating table ‘sbtest8‘...
Creating table ‘sbtest5‘...
Inserting 100000 records into ‘sbtest8‘
Inserting 100000 records into ‘sbtest5‘
Creating a secondary index on ‘sbtest6‘...
Creating table ‘sbtest10‘...
Creating a secondary index on ‘sbtest7‘...
Inserting 100000 records into ‘sbtest10‘
Creating a secondary index on ‘sbtest8‘...
Creating a secondary index on ‘sbtest5‘...
Creating table ‘sbtest9‘...
Inserting 100000 records into ‘sbtest9‘
Creating a secondary index on ‘sbtest10‘...
Creating a secondary index on ‘sbtest9‘...
sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-password=‘z******56‘ --mysql-db=sbtest --db-driver=mysql --tables=10 --table-size=100000 --report-interval=10 --threads=4 --time=3600 run
sysbench 1.0.9 (using system LuaJIT 2.0.4)

Running the test with following options:
Number of threads: 4
Report intermediate results every 10 second(s)
Initializing random number generator from current time

Initializing worker threads...

Threads started!
show processlist;
+------+------+---------------------+----------------+---------+-------+----------+------------------------------------------------------------------------------------------------------+
| Id   | User | Host                | db             | Command | Time  | State    | Info                                                                                                 |
+------+------+---------------------+----------------+---------+-------+----------+------------------------------------------------------------------------------------------------------+
    | NULL                                                                                                 |
| 1440 | root | localhost           | NULL           | Sleep   |  4702 |          | NULL                                                                                                 |
| 1845 | root | localhost           | NULL           | Query   |     0 | init     | show processlist                                                                                     |
| 1851 | root | 127.0.0.1:51248     | sbtest         | Execute |     0 | update   | INSERT INTO sbtest5 (id, k, c, pad) VALUES (50374, 45438, ‘75070436389-27214864945-56233774250-65143 |
| 1852 | root | 127.0.0.1:51246     | sbtest         | Execute |     0 | update   | INSERT INTO sbtest6 (id, k, c, pad) VALUES (50468, 50426, ‘76218889497-54416747310-58929447688-63765 |
| 1853 | root | 127.0.0.1:51250     | sbtest         | Execute |     0 | updating | DELETE FROM sbtest6 WHERE id=49766                                                                   |
| 1854 | root | 127.0.0.1:51252     | sbtest         | Execute |     0 | updating | UPDATE sbtest10 SET c=‘71905504324-66806578758-49221258817-06632329054-91152507632-51828853433-94417 |

原文地址:https://www.cnblogs.com/weifeng1463/p/9574338.html

时间: 2024-11-02 07:38:56

myql基准测试工具Sysbench的相关文章

MySQL基准测试工具sysbench安装

sysbench简介 该工具目前有三个版本0.4, 0.5和1.0, 版本间语法和参数上有些许差别. 本文为最新版本1.0.9, 其是基于LuaJIT的多线程基准测试工具, 常用于数据库基准测试; 另, 还可对操作系统关键子系统进行测试. 除內建测试, 还可编写Lua脚本, 实现特定业务的测试. sysbench下载 链接, https://github.com/akopytov/sysbench 安装依赖环境 1. yum -y install make automake libtool pk

详解MySQL基准测试和sysbench工具

前言 作为一名后台开发,对数据库进行基准测试,以掌握数据库的性能情况是非常必要的.本文介绍了MySQL基准测试的基本概念,以及使用sysbench对MySQL进行基准测试的详细方法. 文章有疏漏之处,欢迎批评指正. 目录 一.基准测试简介 1.什么是基准测试 2.基准测试的作用 3.基准测试的指标 4.基准测试的分类 二.sysbench 1.sysbench简介 2.sysbench安装 3.sysbench语法 4.sysbench使用举例 5.测试结果 三.建议 一.基准测试简介 1.什么

基准测试工具

基准测试工具可以用来对数据库或者操作系统调优后的性能进行对比.MySQL数据库本身提供了一些比较优秀的工具,这里介绍另外两款更优秀.更常用的工具:sysbench和mysql-tpcc. sysbench sysbench是一个模块化的.跨平台的.多线程基准测试工具,主要用于测试各种不同系统参数下的数据库负载情况. 它主要包括以下几种测试方式: CPU性能. 磁盘IO性能. 调度程序性能. 内存分配及传输速度. POSIX线程性能. 数据库OLTP基准测试. sysbench的数据库OLTP测试

压力测试工具sysbench

sysbench是一个模块化.跨平台.多线程基准测试工具,主要用于测试不同系统参数下的数据库负载情况,本文主要介绍0.4版本的使用.sysbench主要用于以下性能测试: 文件I/O性能 调度 内存分配和传输 POSIX线程 数据库 安装 1.安装插件 yum install libtool -y 2.安装 ./configure --prefix=/usr/local/sysbench-0.4.12 --with-mysql-includes=/usr/local/mysql/include

mysql基准测试工具tpcc-mysql安装、使用、结果解读

TPCC是专门针对联机交易处理系统(OLTP系统)的规范,一般情况下我们也把这类系统称为业务处理系统,tpcc-mysql是percona基于TPC-C(下面简写成TPCC)衍生出来的产品,专用于MySQL基准测试.其源码放在launchpad上,用bazaar管理,项目地址:https://code.launchpad.net/~percona-dev/perconatools/tpcc-mysql,专门转对mysql的基准测试工具,模拟电商业务流程.但是tpcc-mysql的结果并未获得TP

tpcc-mysql   mysql基准测试工具使用文档

mysql基准测试工具tpcc-mysql的安装和使用1.tpcc-mysql介绍:TPC(Tracsaction Processing Performance Council) 事务处理性能协会是一个评价大型数据库系统软硬件性能的非盈利的组织,TPC-C是TPC协会制定的,用来测试典型的复杂OLTP系统的性能.Tpcc-mysql是percona基于tpcc衍生出来的产品,专用于mysql基准测试.2.官网地址:https://github.com/Percona-Lab/tpcc-mysql

MYSQL常用基准测试工具之mysqlslap的使用

mysqlslap是MYSQL自带的基准测试工具,无需单独安装即可使用.下面记录一下在服务器上用 mysqlslap做MYSQL基本测试的步骤. 1. cd /usr/local/mysql/bin/ 进入mysql安装目录的bin目录下,我的mysql安装在 /usr/local下. 2.   mysqlslap --concurrency=1,50,100 --iterations=3 --number-int-cols=5 --number-char-cols=5 --auto-gener

基准测试工具:Wrk初识

最近和同事聊起常用的一些压测工具,谈到了Apache ab.阿里云的PTS.Jmeter.Locust以及wrk各自的一些优缺点和适用的场景类型. 这篇博客,简单介绍下HTTP基准测试工具wrk的基本使用方法... 一.压测工具对比 工具名称 类型 多协议支持 优缺点 适用人群&场景 Apache ab 开源 HTTP  Apache自带源生测试工具,安装部署简单,不适合多协议及复杂场景  开发:单机&单接口性能基准验证  PTS 商业 多协议(支持不太好)  阿里云配套收费压测工具,支持

mysql基准测试与sysbench工具

一.基准测试简介  1.什么是基准测试 数据库的基准测试是对数据库的性能指标进行定量的.可复现的.可对比的测试. 基准测试与压力测试 基准测试可以理解为针对系统的一种压力测试.但基准测试不关心业务逻辑,更加简单.直接.易于测试,数据可以由工具生成,不要求真实;而压力测试一般考虑业务逻辑(如购物车业务),要求真实的数据. 2.基准测试的作用 对于多数Web应用,整个系统的瓶颈在于数据库;原因很简单:Web应用中的其他因素,例如网络带宽.负载均衡节点.应用服务器(包括CPU.内存.硬盘灯.连接数等)