我想知道是否有一个(免费的)mysql/php基准测试工具。
特别地,我想在MySQL数据库中插入数千个数据,并使用并发查询测试应用程序,看看它是否会持续下去。也就是说,在最坏的情况下测试应用程序。
我看到了一些付费工具,但没有免费的或可定制的。
任何建议吗?或者任何脚本?
感谢
向表中插入一条记录
那么做:
INSERT IGNORE INTO table SELECT FLOOR(RAND()*100000) FROM table;
然后多次运行这一行。每次您都会将表中的行数翻倍(并且翻倍的增长速度非常快)。这比在PHP或其他代码中生成数据要快得多。您可以修改从中选择RAND()的列,以及数字的范围。也可以随机生成文本,但需要更多的工作。
您可以同时从多个终端运行此代码以测试并发插入。IGNORE将忽略任何主键冲突
创建一个循环(可能是无限的),将数据插入数据库并从那里进行测试。
for($i=1;$i=1000;$i++){
mysql_query("INSERT INTO testing VALUES ('".$i."')");
//do some other testing
}
for($i=1;$i<5000;$i++){
$query = mysql_query("INSERT INTO something VALUES ($i)");
}
D
如果你想测试并发性,你将不得不线程插入/更新语句。
一种简单的方法(不需要使用fork/threads之类的东西)是在bash中完成,如下所示
1. 创建一个可执行的PHP脚本
#!/usr/bin/php -q
<?php
/*your php code to insert/update/whatever you want to test for concurrency*/
?>
2。通过附加&
在for循环中调用它,所以它进入后台。
#!/bin/bash
for((i=0; i<100; i++))
do
/path/to/my/php/script.sh &;
done
wait;
您总是可以通过创建多个php脚本来扩展它,这些脚本具有各种插入/更新/选择查询,并通过for循环运行它们(如果您想要更多的负载,请记住将i<100
更改为更高的数字)。只是不要忘记在调用脚本后添加&
。(当然,您需要chmod +x myscript.sh
)
编辑:添加了等待语句,在这下面你可以写其他的命令/东西,你可能想在你的mysql数据库泛滥后做
我做了一个快速搜索,并在MySQL文档=> http://dev.mysql.com/doc/refman/5.0/en/custom-benchmarks.html找到了以下页面。本页包含以下有趣的链接:
开源数据库基准,可在http://osdb.sourceforge.net/。
例如,您可以尝试基准测试包,如SysBench和DBT2,可从http://sourceforge.net/projects/sysbench/获得,以及http://osdldbt.sourceforge.net/dbt2。这些包裹可以带来系统的膝盖,所以一定要使用它们只在您的开发系统。
MySQL要快,你应该看看Memcached或Redis缓存你的查询。我很喜欢Redis,你可以通过http://redistogo.com获得一个免费的(小)实例。大多数情况下,是读操作杀死了服务器,而不是写操作,后者的频率较低(大多数情况下)。在大多数情况下,如果经常进行write操作,那么丢失一些数据就不是什么大问题了。写率高的网站有Twitter和Facebook。但话说回来,我不认为一条推特或Facebook墙上的帖子丢失了就是世界末日。就像我之前指出的,你可以通过使用Memcached或Redis轻松解决这个问题。
如果写阻塞,你可以考虑批量插入,事务插入,不使用InnoDB或分区时的延迟插入。如果数据不是非常重要,您可以先将查询放在内存中,然后定期进行批量插入。这样,当你从MySQL读取时,你会返回陈旧的数据(可能是问题)。但是,当你使用redis时,你可以很容易地将所有数据存储在内存中,但是当你的服务器崩溃时,你可能会丢失数据,这可能是一个大问题。