我的MySQL慢查询日志中不断记录插入查询 我想看看INSERT查询花了多少时间进行100次同时插入操作(到同一个表)。
所以我需要模拟以下内容 从PHP到mysql服务器上的同一个数据库的500个不同的同时连接,所有这些连接都在同一个表中插入一行。
我需要使用任何负载测试工具吗? 或者我可以简单地编写一个PHP脚本来执行此操作吗?
有什么想法?
PS:我在Windows上使用apache。
答案 0 :(得分:4)
如果您在Windows上安装了apache,则应该使用apache基准测试工具(ab.exe)。创建您的php脚本以插入行并通过以下方式访问它:http://127.0.0.1/insert.php。通过运行此ab命令测试100个并发连接:
ab.exe -n 100 -c 100 http://127.0.0.1/insert.php
那应该通过你的php脚本同时运行这100个插入。
答案 1 :(得分:2)
您使用的是PHP5.3吗?
新的MySQL驱动程序(mysqlnd)可以处理并行查询。
试试这个:
<?php
$query = "SELECT 'test'";
$all_links = array();
for($i=0; $i<100; $i++) {
$link = mysqli_connect();
$link->query($query, MYSQLI_ASYNC);
$all_links[] = $link;
}
$processed = 0;
do {
$links = $errors = $reject = array();
foreach ($all_links as $link) {
$links[] = $errors[] = $reject[] = $link;
}
if (!mysqli_poll($links, $errors, $reject, 1)) {
continue;
}
foreach ($links as $link) {
if ($result = $link->reap_async_query()) {
print_r($result->fetch_row());
mysqli_free_result($result);
$processed++;
}
}
} while ($processed < count($all_links));
答案 2 :(得分:1)
由于PHP通常是通过HTTP请求触发的,因此您需要某人/某事来发出许多HTTP请求。
我多年来一直在使用http://jmeter.apache.org/,这对于这些场景非常有价值。
答案 3 :(得分:0)
由于您要测试PHP的连接,您应该使用PHP运行测试。
您还想测试MySQL范围的负载,因此最好从MySQL运行的同一台机器上运行PHP脚本(如果适用)。
关于“同时”事情的最后一个注意事项,你应该使用线程。就个人而言,我从未在PHP中使用过线程,但谷歌想出了这个php class。
我希望这会有所帮助。