Sysbench测试神器:一条命令生成百万级测试数据

1. 基准测试

基准测试(benchmarking)是性能测试的一种类型,强调的是对一类测试对象的某些性能指标进行定量的、可复现、可对比的测试。

image

进一步来理解,基准测试是在某个时候通过基准测试建立一个已知的性能水平(称为基准线),当系统的软硬件环境发生变化之后再进行一次基准测试以确定那些变化对性能的影响,这也是基准测试最常见的用途。其他用途包括测定某种负载水平下的性能极限、管理系统或环境的变化、发现可能导致性能问题的条件等等。

2. 基准测试的作用

对于大多数Web应用而言,系统的瓶颈往往很容易发生在数据库端,原因很简单:Web应用中的其他因素,例如网络带宽、负载均衡节点、应用服务器(包括CPU、内存、硬盘灯、连接数等)、缓存,都很容易通过水平的扩展(俗称加机器)来实现性能的提高。而对于数据库如MySQL,由于数据一致性的要求,无法通过增加机器来分散向数据库写数据带来的压力;虽然可以通过前置缓存(Redis等)、读写分离、分库分表来减轻压力,但是与系统其它组件的水平扩展相比,受到了太多的限制。

而对数据库的基准测试的作用,就是分析在当前的配置下(包括硬件配置、OS、数据库设置等),数据库的性能表现,从而找出数据库的性能阈值,并根据实际系统的要求调整配置。除此之外,对数据库服务器进行基准测试,也通常用于观察对比数据库结构修改之前以及修改之后,其性能会受到什么样的影响。

3. 基准测试与压力测试区别

很多时候,基准测试和压力测试在实际使用的过程中,很容易被弄混淆。基准测试可以理解为针对系统的一种压力测试。但基准测试不关心业务逻辑,更加简单、直接、易于测试,数据可以由工具生成,不要求真实;而压力测试一般考虑业务逻辑(如购物车业务),要求真实的数据。

4. 基准测试的指标及工具

常见的数据库指标包括:

  • TPS/QPS:主要用于衡量吞吐量。
  • 响应时间:包括平均响应时间、最小响应时间、最大响应时间、时间百分比等,其中时间百分比参考意义较大,如前95%的请求的最大响应时间。
  • 并发量:同时处理的查询请求的数量。

如果只是针对数据库服务器,例如只针对MySQL数据库开展基准测试,一般可以使用专门的工具进行,例如mysqlslapsysbench等。

mysqlslap是MySQL5.1.4之后自带的benchmark基准测试工具,该工具可以模拟多个客户端同时并发的向服务器发出查询更新,给出了性能测试数据而且提供了多种引擎的性能比较。

其中,sysbenchmysqlslap更通用、更强大,本文将给大家介绍如何使用sysbench来开展基准测试,之所以说它是测试神器,是因为除了能对利用它对各类基础设施对象开展基准测试以外,还可以利用它的实现思路帮助我们生成成百上千万的测试数据,往下看,一起来揭秘吧~

5. sysbench基准测试

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

  • cpu性能
  • 磁盘io性能
  • 调度程序性能
  • 内存分配及传输速度
  • POSIX线程性能
  • 数据库性能(OLTP基准测试)

目前sysbench主要支持MySQL,pgsql,Oracle这3类数据库

默认支持MySQL,如果需要测试Oracle/PostgreSQL,则在configure时需要加上–with-oracle或者–with-pgsql参数.

通过sysbench工具对数据库开展基准测试最大的亮点在于:可以自动帮你在数据库里构造出来大量的数据,你想要多少数据,就自动给你构造出来多少条数据。同时还可以模拟几千个线程并发的访问数据库,模拟使用各种各样的 SQL 语句,包括模拟出来各种事务提交到你的数据库里去,甚至可以模拟出几十万的 TPS 去压测数据库。

image

6. sysbench基本语法

1、在使用前,先要需要安装,建议在Linux下安装sysbench

yum install -y sysbench

2、sysbench的基本语法如下:

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

其中,command是sysbench要执行的命令,包括prepareruncleanup
顾名思义:

  • prepare是为测试提前准备数据
  • run是执行正式的测试
  • cleanup是在测试完成后对数据库进行清理。

testname指定了要进行的测试,在老版本的sysbench中,可以通过--test参数指定测试的脚本;而在新版本中,--test参数已经声明为废弃,可以不使用--test,而是直接指定脚本。

如下两种方法效果是一样的:

sysbench --test=./tests/include/oltp_legacy/oltp.lua
sysbench ./tests/include/oltp_legacy/oltp.lua

测试时使用的脚本为lua脚本,可以使用sysbench自带脚本,也可以自己开发。对于大多数应用,使用sysbench自带的脚本就足够了。不同版本的sysbench中,lua脚本的位置可能不同,可以自己在sysbench路径下使用find命令搜索oltp.lua

大多数数据服务都是oltp类型的,如果你不了解什么是oltp,那么大概率你的数据服务就是oltp类型的。

7. sysbench使用实践(一键构建百万级数据)

接下来,给大家演示一下,如何使用sysbench来对MySQL开展基准测试,以及如何利用sysbench一条命令来构建百万级测试数据。

注:sysbench基准测试技能,在笔者的全栈测试开发训练营数据库版块中,对训练营的学员有过专题介绍,本文算是给公号读者送福利了。

image

操作方法:

1、在基准测试prepare准备阶段,先创建默认的测试库,例如sysbench_test

mysql> create database sysbench_test;      #创建数据库

如此处,创建sysbench_test数据库


image

2、准备数据,时间比较长,本文主要为了演示方法,因此把table_size设置的小一点

sysbench /usr/share/sysbench/oltp_read_write.lua --tables=5 --table_size=100 --mysql-user=root --mysql-password=xxx --mysql-host=192.168.0.103 --mysql-port=3306 --mysql-db=sysbench_test prepare

其中,几个关键参数:

  • --tables:指定生成表的数量,此处设置了5张表,表明生成5张测试表,读者可根据实际需要,调整此值。
  • --table_size:指定生成表中生成的数据量,上述例子,表明每张表生成100条测试数据,实际可以根据需要调整引值,比如调整为:1000000,即代表生成一百万条测试数据。
  • --mysql-db: 连接的测试数据库名称。
    其它几项参数较为简单,就不一一介绍了。

执行上述命令后,输出如下:


image

命令执行成功后,可以打开数据库查看生成的数据是否和设置的对应:


image

可以看到,已经自动生成了100条测试数据了,如果需要一键成生成百万条测试数据,只需要将--table_size=100 修改为 --table_size=1000000即可。

3、选择一个lua脚本进行测试,如验证读写性能,执行命令如下:

 sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-user=root --mysql-password=xxx --mysql-host=192.168.0.103 --mysql-port=3306 --mysql-db=sysbench_test --tables=5 --table_size=100 --threads=10 --time=30 --report-interval=3 run

上述命令,表明使用了10个并发线程数,执行时间为30秒,每3秒输出一次测试信息。
实际读者可以将--threads=10--time=30值调大一些。

输出信息类似如下:


image

其中,对于我们比较重要的信息包括:

  • queries:查询总数及qps
  • transactions:事务总数及tps
  • Latency-95th percentile:前95%的请求的响应时间。

4、执行完测试,拿到所需要的测试结后,最后一步,记得要清理数据,否则后面的测试可能会受到影响。

sysbench /usr/share/sysbench/oltp_read_write.lua --tables=5 --table_size=100 --mysql-user=root --mysql-password=xxx --mysql-host=192.168.0.103 --mysql-port=3306 --mysql-db=sysbench_test cleanup

如果觉得有用,帮忙点个好看朋友圈转发分享一下就行。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342