今天来说说两款压测工具sysbench,swingbench,早些时候傻傻分不清楚,其实两个差别大了去了。
swingbench先来说说swingbench,这款工具是Oracle英国的一个员工用Java开发的,没想到一下子成了压测Oracle的不二之选。当然Oracle还有不少这样的工具,比如DUL(Data UnLoader),是新西兰的一个员工用c开发,一个可以直接读取数据文件的工具,基本是ACS部门在提供高级服务所用。还有一款是SQLT也叫作SQLTXPLAIN,是Oracle Server Technologies Center of Expertise - ST CoE 提供的一款工具,可以通过MOS ID(ID 215187.1)下载,当然这样的工具还不少。
回到我们的话题,swingbench因为基于Java的原因,所以跨平台的支持还是很不错的。基本上我们是在Windows平台上测试服务端的数据库性能,用到了Java,那么使用JDBC是很自然的一件事情。
swingbench的设计风格是完全的组件化,每个组件可以单独抽出来使用,所以你如果到支持的站点去查看。宣传的组件图还是很霸气的。比如swingbench的主界面,数据生成器,追踪分析。
还有更炫的。监控数据库的多项指标,DB time等。这效果和商用的spotlight监控有一拼。
毫无疑问,swingbench是个好东西,一个工具箱继续发扬光大,得靠大家的使用和推广普及。有句话说得好,世上只有两种工具,一种是被人骂的,另一种是没人用的,被骂的越多,侧面反映出关注度越高,使用率越高,越用越成熟,这个MySQL就是一个很不错的例子。
swingbench支持的功能如此丰富,可以指定多个数据仓库,可以生成指定大小的数据,测试是基于订单业务,模拟的场景更加丰富,它有什么缺点吗?有的。
首先个人感觉最大的一点是它只支持Oracle,其实基于JDBC就是一个轻量级的接口,可以连接多种数据库。数据库工具松鼠就是这样,一个JDBC可以适配很多的数据库。如果在这一点上有所突破,我觉得还是有很大的潜力的。
还有基于这个工具的特性,支持Oracle平台,似乎离开源社区还有一定的距离,尽管这个工具确实是开源的,我查了下github上暂时还没有看到,目前的支持是通过站点来维护的,目前最新的版本是2.6,已经支持12c.
sysbench这款工具和swingbench有一个共同点,那就是它也是Oracle的一个员工开发的,不过属于MySQL team,后来到了Percona.
一个公司竟然能够产出两种风格的软件,和本身支持的数据库是有明显的关系的,这句话可能比较绕。我逐渐展开来说,先说说我最近安装,使用sysbench的一些感受。
如果使用sysbench比较早一些的版本,应该就是0.4.12了。这个版本最早也是有一个单独的站点来维护的,目前已经全面转移到github上了。
这个工具基于c开发,目前支持的数据库种类很丰富。
# find . -name "drv*.c"
./drizzle/drv_drizzle.c
./pgsql/drv_pgsql.c
./mysql/drv_mysql.c
./oracle/drv_oracle.c
./attachsql/drv_attachsql.c其中MySQL,这是原生支持,默认就有的。还支持PostgreSQL和Oracle,还有一个MySQL的分支drizzle也是支持的。
0.4.12的版本很多年前就在用,优点很多,可以压测内存,CPU,IO,mutext等都可以测试,支持的数据库压测是其中的一个部分。这部分功能基于c的优势就很明显了。
但是0.4.12这个版本限制还是比较多,比如只能基于一个数据库的一个一个表来压测,这一点来说限制就很大了。所以能够测试的场景还是很有限的。
到了0.5的版本,这个情况改观了,可以一个库里多表了,而且可以设置interval参数来查看一个实时的变化了。因为它支持Oracle,所以我就很有兴趣的测试了一下,结果让我有点受挫。
为什么呢,0.5的版本中安装Oracle,主要就是一个动态链接库的配置要到位,但是配置好之后要开启测试的时候,发现数据库的驱动选择了oracle,但是测试却提示unknown database,带着疑问细看,原来测试的模板里竟然没有Oracle.这个怎么办自己动手丰衣足食,不过要写还确实有难度,为什么呢,因为模板是基于脚本语言Lua的,这又多了一道坎。
不过行业里也有不少朋友写了一些Lua的模板可以参考。
这里我诉诉苦,那就是sysbench最新版本是1.0.3,我想新版本支持Oracle应该已经做得很好了,看官方的提示,对于Oracle安装还单独提供了一个README-Oracle.md,但是里面的安装提示还是和我预期的有一些差别。
首先是安装的客户端,目前提供的是12c的精简版,这个没有问题,但是基于的操作系统是ubuntu 14,对于Oracle企业版来说是没有官方认证的,Linux版本Oracle官方可查到的,支持的系统基本是下面的这几个,版本会有一些变化。
Red Hat Enterprise Linux AS/ES
Oracle Enterprise Linux ( OEL)
SUSE Linux Enterprise Server
AsianuxUbuntu也是Linux,但是后面的安装就让我有了不少的难度,需要安装Cuda,而且是使用dpkg,这部分很陌生,查了下原来dpkg 是Debian package的简写,为"Debian" 操作系统专门开发的套件管理系统,用于软件的安装,更新和移除。
安装一套Cuda环境,我查了下,要花的功夫还真不少,最后辗转尝试,算是放弃了。
于是回到0.5的版本来,配置了动态链接库,很快就配置好了,但是没有Lua模板,这个时候可以参考osdba提供的一套定制版,可以支持MySQL,Oracle,PostgreSQL,我试了下,还不错。
整个过程如果使用git分分钟即可搞定。
抓取sysbench的安装部分
# git clone https://github.com/osdba/sysbench_bin.git然后抓取Lua脚本部分
# git clone https://github.com/osdba/sysbench_lua 然后创建一个sysbench目录,把抓取到的两个目录整合起来。
# mkdir sysbench
# cd sysbench
# cp ../sysbench_bin/bin/* .
# cp -r ../sysbench_lua/lua . 这样一来目录下就有了3个执行文件,和直接使用sysbench的命令方式基本一样,只是有所侧重。
-rwxr-xr-x 1 root root 3307216 Mar 24 16:09 sysbench_mysql
-rwxr-xr-x 1 root root 3324397 Mar 24 16:09 sysbench_ora
-rwxr-xr-x 1 root root 3253979 Mar 24 16:09 sysbench_pg
这两个压测工具还是有很鲜明的特点,也有自己固有的缺点,但是瑕不掩瑜,它们都有自己擅长的领域和亮点特性。所以测试还是得看场景,基准测试真是一块硬骨头。