MySQL中一个被索引了的列,如果在某些行的数据是null,这对性能的影响倒底有多大? 这个需要做下benchmarking才知道。
所有相关工具中, mysqlslap应该是最轻量的; 但它的可控性实在太弱,连让测试者自己造数据都做不到。
经过比较后,我发现最适合的工具应该是Super Smack. 用它做完测试后,结论很简单:被索引列是否可空,对性能的影响很小。
对我来说,更大的收获是学会了用专门的工具进行sql Benchmarking. 由于Super Smack是一个非常简陋的软件,安装、使用它的过程非常痛苦,痛苦到不停地想放弃。
然而。。。还是。。。
废话少说,先说下安装。
在64位CentOS上安装Super Smack
1.下载
传说中的 Tony Bourke维护的版本已经废了(网站都关了),我们只能从这里下载:
https://github.com/tmountain/Super-Smack
2.安装mysql client相关的lib
直接./configure会出一堆错。你要先安装
yum install mysql-devel
由于Super Smack不会去lib64目录下找lib, 你还得把相关lib“复制”到/usr/lib目录中。
ln -s /usr/lib64/mysql/libmysqlclient_r.so.16.0.0 /usr/lib/libmysqlclient.so
3. 还要改一下源码中的一个头文件
在dictionary.h加入 #include <string.h>
4. 接下来正常安装
./configure --with-mysql make make install
5.试运行
#从自带的smack中复制一个出来,免得把原来的改坏了 cp smacks/select-key.smack smacks/my.smack
接下来修改my.smack里面的mysql配置,包括client admin和client smacker1的user, pass, host, db等。按照这个smack的写法,admin用户要有ddl权限,smacker1用户要有修改和查询的权限。
另外一个要修改的是 socket "/tmp/mysql.sock" . 你的mysql.sock文件的路径未必是这个样子,所以要把它们替换成真实的路径,比如
$ find / -name "mysql.sock" #mysqld要先启起来才能找到这个文件 #输出:/var/lib/mysql/mysql.sock
最后运行一下Super Smack
$super-smack smacks/my.smack 10 100 #10个并发client,每个client执行100次
输出
Query Barrel Report for client smacker1
connect: max=1ms min=0ms avg= 0ms from 10 clients
Query_type num_queries max_time min_time q_per_s
select_index 2000 0 0 19132.17
我走了不少弯路才总结出这些经验。
后一篇中我们将搭建测试环境,按照测试场景配置新的smack, 最后执行测试。