下载地址: http://vegan.net/tony/supersmack/
源码: http://vegan.net/tony/supersmack/super-smack-1.3.tar.gz
二、编译及安装
编译环境:Ubuntu Server 9.10 64位
配置编译选项:./configure--prefix=/usr/local/super-smack-1.3 --with-mysql--with-smacks-dir=/usr/local/super-smack-1.3
由于MySQL采用了编译安装的方式因此编译选项改为:
./configure --prefix=/usr/local/super-smack-1.3 --with-mysql --with-smacks-dir=/usr/local/super-smack-1.3 --with-mysql-lib=/usr/local/mysql/lib/mysql --with-mysql-include=/usr/local/mysql/include/mysql
make && make install
configure: error: Could not find libmysqlclient in ' /usr/lib /usr/lib/mysql /usr/local/lib /usr/local/lib/mysql /usr/local/mysql/lib
configure: error: Could not find mysql.h in ' /usr/include /usr/include/mysql /usr/local/include /usr/local/include/mysql /usr/local/mysql/include'
cd /usr/include; ln -s /usr/local/mysql/include/mysql
cd /usr/lib; ln -s /usr/local/mysql/lib/mysql
注意:在编译时,可以先把对应的libmysqlclient.so.*拷贝到/usr/lib
在make的过程中遇到如下错误:
dictionary.h:93: error: ‘strlen’ was not declared in this scope
super-smack.cc:126: error: ‘strlen’ was not declared in this scope
query.cc:200: error: cast from ‘char*’ to ‘unsigned int’ loses precision
query.cc:200: error: cast from ‘char*’ to ‘unsigned int’ loses precision
query.cc:219: error: cast from ‘char*’ to ‘unsigned int’ loses precision
query.cc:219: error: cast from ‘char*’ to ‘unsigned int’ loses precision
三、使用super-smack
(1)首先需要修改相应的.smack文件,这些文件在源码目录下的smacks目录下,有select文件和update文件,其实就是代表测试的不同类型,是select还是update,可以选择你要的操作使用相应的文件,这里我们使用select-key.smack. 将两处mysql socket修改成实际的mysql socket所在位置。
将两处处words.dat改成http_auth.dat。
将一处gen_data_file “gen-data -n 90000 -f %12-12s%n,%25-25s,%n,%d”;
修改成gen_data_file “./gen-data -n 90000 -f %12-12s%n %25-25s %n %d”;注意是将逗号改为TAB空格.
(2)使用super-smack生成数据文件,然后导入mysql的http_auth表中,在bin目录下运行:
./gen-data-n 90000 -f %12-12s%n %25-25s %n %d > /var/smack-data/http_auth.dat
(3)在super-smack目录下运行进行压力测试了
bin/super-smack-d mysql select-key.smack 10 1000
-d指明是mysql数据库测试,然后指明测试文件,10表示10个线程,1000表示每个线程有1000个查询,可以根据你的需要修改.
查询结果:
Query Barrel Report for client smacker
connect:max=3ms min=0ms avg=1ms from 10 clients
Query_type num_queries max_time min_time q_per_s
select_index 20000 1 0 8124.3
在以上测试结果中,
l10代表10个客户端同时接入,1000代表每个客户端的查询次数(脚本中,对查询次数做了翻倍处理);
lmax、min、avg为客户端最大、最小、平均连接时间;
lnum_queries、max_time、min_time为总请求次数,最大、最小查询时间(以毫秒为单位);
lq_per_s为每秒处理的请求数。
四、MySQL性能测试总结
基于模拟的一张的100w条记录的表进行测试,select的并发的最大客户端数是mysql能够允许的最大客户端连接数的3倍左右,update的并发的最大客户端数需低于mysql能够允许的最大客户端连接数。select的每秒平均查询次数是update的执行次数的3-4倍左右,当select获取的数据时多条记录时它的性能会下降一倍左右,如果在where条件中添加and条件能够提高mysql的查询性能,or条件则会降低查询性能。update在根据where条件更新多条记录时,性能也会下降一倍左右。以上结论是通过实验测试数据总结得出的结论,不同的环境数据可能会有不同。
五、参考资料
http://wangxiaoyu.blog.51cto.com/922065/463311
http://saw-unix.com/2010/08/super-smack_install_use.html
http://jatula.iteye.com/blog/297420
LinuxTone运维专家我的邀请链接:http://bbs.linuxtone.org/home.php?mod=invite&u=9145&c=a731102f9204f7fe