mysqlslab和super-smack的比较测试:
Mysqlslab
作用:模拟并发测试数据库性能。
优点:简单,容易使用。
不足:不能指定生成的数据规模,测试过程不清楚针对十万级还是百万级数据做的测试,感觉不太适合做综合测试,比较适合针对既有数据库,对单个sql进行优化的测试
super-smack
功能强大,可定制的benchmarking工具,提供量化,负载加载(每秒执行查询数)
产生数据(外部或内部)
可以使用字典文件来替换参数
提供查询间隔时间
方便调整查询频率
可以让不同的连接执行不同的语句
需要在不同的操作系统上编译
《一》:super-smack
关于super-smack的安装是相当需要费一番周折,安装super-smack之前,首先要确定已经安装了mysql的头文件mysql.h 和共享库文件libmysqlclient.
一、准备安装:
1.如果要安装super-smack,则需要在安装了mysql服务端与客户端之后再安装以下两个包,MySQL-devel....rpm,MySQL-shared compact...rpm。
软件包:
rhel-server-6.3-i386-dvd.iso安装包
super-smack-1.3.tar.gz
在rhel-server-6.3-i386-dvd.iso安装包中的mysql相关包都是rpm格式的,RPM格式文件安装之间关联性比较强容易产生冲突,因此以下安装采用yum安装
yum安装需要将以下红线标示出来的mysql包安装
1.1、.预安装配置
若未能安装上面红线相关mysql包,在安装super-smack时会有以下问题
./configure则会提示以下错误:
1.configure: error: Could not find mysql.h in ' /usr/include /usr/include/mysql
/usr/local/include /usr/local/include/mysql
/usr/local/mysql/include' ;
2.configure: error: Could not find libmysqlclient in ' /usr/lib /usr/lib/mysql
/usr/local/lib /usr/local/lib/mysql
/usr/local/mysql/lib;
其中mysql.h包含在mysql的开发包中,所以提示找不到mysql.h。而libmysqlclient包含在mysql的共享库包中。
安装完mysql开发包后,会发现mysql.h 存在/usr/include/mysql/mysql.h
安装完mysql共享库包后,会发现存在/usr/lib/libmysqlclient.so.16
若在64位机器上安装,安装此包后若还是提示错误, 编译的时候要把/usr/lib64目录下的libmysqlclient.so.16放到/usr/lib目录下。
出现到这里./configure基本完成,接下来进行make
1.2、make编译会产生以下问题
以上问题需要到dictionary.h和super-smack.cc文件中在头文件加上#include<string.h>
更改之后以上问题得以解决,编译总可以了吧,其实不然,make还会暴露问题,不信你看
因此需要安装byacc
yum install byacc
然后再进行编译,make && make install 则会最终安装成功。
1.3、安装完成则可进行测试了
super-smack -d mysql select-key.smack 10 1000
如果运行出错,如下:
在my.cnf下或者select-key.smack和update-key.smack修改socket
或者在/usr/local/mysql下为两个socket建立软连接
二、测试说明:
super-smack -d mysql ./smacks/select-key.smack 10 1000
10 表示启动10个客户端,1000 则表示每个客户端轮询1000次。
结果分析
很容易理解。结果包括一共执行了多少次查询(num_queries),最大的一次查询时间(max_time)是48ms,耗时最少的一次查询是2ms,每秒完成查询(min_time)5396.29次
三、smack文档学习
要做自定义的MySQL测试,当然就必须编辑自己的配置文件(.smack)。Super Smack之所以很灵活,就在于可以在它的配置文件中自定义很多的东西。当然,随着而来的就是配置文件的相对复杂。理解它的配置文件的结构,是学会用Super Smack的关键所在。
下文将以select-key.smack为例,讲解.smack配置文件的结构。
client "admin"
{
user "root";