PHP:模拟与同一数据库的多个MySQL连接

时间:2010-12-31 09:52:12

标签: php mysql testing

我的MySQL慢查询日志中不断记录插入查询 我想看看INSERT查询花了多少时间进行100次同时插入操作(到同一个表)。

所以我需要模拟以下内容 从PHP到mysql服务器上的同一个数据库的500个不同的同时连接,所有这些连接都在同一个表中插入一行。

我需要使用任何负载测试工具吗? 或者我可以简单地编写一个PHP脚本来执行此操作吗?

有什么想法?

PS:我在Windows上使用apache。

4 个答案:

答案 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

我希望这会有所帮助。