阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

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

26次阅读
没有评论

共计 4352 个字符,预计需要花费 11 分钟才能阅读完成。

导读 sysbench 是一款开源的多线程性能测试工具,可以执行 CPU/ 内存 / 线程 /IO/ 数据库等方面的性能测试。数据库目前支持
MySQL/Oracle/PostgreSQL。本文主要演示 Mysql 测试的用法,后续准备利用 sysbench 来对 CPU/ 内存 /IO 进行一系
列的测试。具体的一些参数设置,需要根据不同的测试要求来进行调整。

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

Sysbench 简介

sysbench 是一个模块化的、跨平台、多线程基准测试工具,主要用于评估测试各种不同参数环境下的系统或数据库的负载情况。
本文主要学习使用 sysbench 来测试 linux 下 mysql 数据库的性能负载情况。

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

  1. CPU 运算性能
  2. 磁盘 IO 性能
  3. 调度程序性能
  4. 内存分配及传输速度
  5. POSIX 线程性能
  6. 数据库性能 (OLTP 基准测试)

目前 sysbench 主要支持 Mysql,Drizzle,PgSQL,Oracle 等几种数据库。

一、下载 sysbench 源码包及 mysql 数据库

1. 目前 sysbench 代码托管在 launchpad 上,项目地址:https://github.com/akopytov/sysbench,下载方式:

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

2. MySQL 官方下载地址:http://dev.mysql.com/downloads/mysql/,下载方式:

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

二、编译安装

1. Mysql 数据库安装:

mysql 数据库的安装可参考本站的另一篇文章:Mysql 二进制包安装与配置实战记录 或直接通过本站右侧的搜索框搜索 Mysql 会发现很多关于 Mysql 安装的文章,本文不再讲解。

2. sysbench 编译非常简单,可参考 README 文档,简单步骤如下:

tar -zxvf sysbench-0.4.8.tar.gz
cd sysbench-0.4.8
./configure && make && make install
strip /usr/local/bin/sysbench

以上方法适用于 MySQL 安装在标准默认目录下的情况,如果 MySQL 并不是安装在标准目录下的话,那么就需要自己指定 MySQL 的路径了。比如我的 MySQL 喜欢自己安装在 /usr/local/mysql 下,则按照以下方法编译:./configure --with-mysql-includes=/usr/local/mysql/include --with-mysql-libs=/usr/local/mysql/lib && make && make install

当然了,用上面的参数编译的话,就要确保你的 MySQL lib 目录下有对应的 so 文件,如果没有,可以自己下载 devel 或者 share 包来安装。另外,如果想要让 sysbench 支持 pgsql/oracle 的话,就需要在编译的时候加上参数
--with-pgsql
或者
--with-oracle
这 2 个参数默认是关闭的,只有 MySQL 是默认支持的。
三、OLTP 测试前准备

初始化测试库环境(总共 10 个测试表,每个表 100000 条记录,填充随机生成的数据):

cd /tmp/sysbench-0.4.12-1.1/sysbench
mysqladmin create sbtest

./sysbench --mysql-host=127.0.0.1 --mysql-port=3317 --mysql-user=tpcc --mysql-password=tpcc \
--test=tests/db/oltp.lua --oltp_tables_count=10 --oltp-table-size=100000 --rand-init=on prepare

关于这几个参数的解释:

--test=tests/db/oltp.lua 表示调用 tests/db/oltp.lua 脚本进行 oltp 模式测试 
--oltp_tables_count=10 表示会生成 10 个测试表 
--oltp-table-size=100000 表示每个测试表填充数据量为 100000 
--rand-init=on 表示每个测试表都是用随机数据来填充的 

如果在本机,也可以使用 –mysql-socket 指定 socket 文件来连接。加载测试数据时长视数据量而定,若过程比较久需要稍加耐心等待。

真实测试场景中,数据表建议不低于 10 个 ,单表数据量不低于 500 万行,当然了,要视服务器硬件配置而定。如果是配备了 SSD 或者 PCIE SSD 这种高 IOPS 设备的话,则建议单表数据量最少不低于 1 亿行

四、进行 OLTP 测试

在上面初始化数据参数的基础上,再增加一些参数,即可开始进行测试了:

./sysbench --mysql-host=127.0.0.1 --mysql-port=3306 \
--mysql-user=tpcc --mysql-password=tpcc \
--test=tests/db/oltp.lua --oltp_tables_count=10 \ 
--oltp-table-size=10000000 --num-threads=8 \ 
--oltp-read-only=off --report-interval=10 \ 
--rand-type=uniform --max-time=3600 \ 
--mysql-table-engine=myisam --max-requests=0 \ 
--percentile=99 run >> ./log/sysbench_oltpX_8_20140921.log

关于这几个参数的解释:

--num-threads=8 表示发起 8 个并发连接
--oltp-read-only=off 表示不要进行只读测试,也就是会采用读写混合模式测试
--report-interval=10 表示每 10 秒输出一次测试进度报告
--rand-type=uniform 表示随机类型为固定模式,其他几个可选随机模式:uniform(固定),gaussian(高斯),special(特定的),pareto(帕累托)
--max-time=120 表示最大执行时长为 120 秒
--max-requests=0 表示总请求数为 0,因为上面已经定义了总执行时长,所以总请求数可以设定为 0;也可以只设定总请求数,不设定最大执行时长
--percentile=99 表示设定采样比例,默认是 95%,即丢弃 1% 的长请求,在剩余的 99% 里取最大值
--mysql-table-engine=myisam 表示测试的表存储引擎类型为 myisam

即:模拟 对 10 个表并发 OLTP 测试,每个表 1000 万行记录,持续压测时间为 1 小时。

真实测试场景中,建议持续压测时长不小于 30 分钟 ,否则测试数据可能不具参考意义。

这里需要注意的是,官方网站上的参数有一处有误,即 –mysql-table-engine,官方网站上写的是 –mysql-table-type,这个应该是没有及时更新导致的。

另外,–mysql-table-engine 参数还可以指定为 innodb 等 MySQL 支持的表存储引擎类型。

五、测试结果解读

测试结果解读如下:

sysbench 0.5:  multi-threaded system evaluation benchmark

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

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-24发表,共计4352字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中