PHP: имитация нескольких подключений MySQL к одной базе данных - PullRequest
8 голосов
/ 31 декабря 2010

Запрос вставки постоянно регистрируется в моем журнале медленных запросов MySQL.
Я хочу посмотреть, сколько времени занимает запрос INSERT при 100 одновременных операциях вставки (в одну таблицу).

Так что мне нужно смоделировать следующее.
500 различных одновременных соединений из PHP в одну и ту же базу данных на сервере MySQL, каждый из которых вставляет строку (одновременно) в одну и ту же таблицу.

Нужно ли использовать какой-либо инструмент для нагрузочного тестирования? Или я могу просто написать скрипт PHP для этого?

Есть мысли?

PS: я использую apache на windows.

Ответы [ 4 ]

4 голосов
/ 04 января 2011

Если вы установили Apache на Windows, у вас должен быть инструмент тестирования Apache (ab.exe). Создайте свой php-скрипт для вставки строки и сделайте его доступным через: http://127.0.0.1/insert.php. Проверьте 100 одновременных подключений, выполнив команду ab:

ab.exe -n 100 -c 100 http://127.0.0.1/insert.php

Это должно запустить эти 100 вставок одновременно через ваш php-скрипт.

2 голосов
/ 05 января 2011

Используете ли вы 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));
1 голос
/ 31 декабря 2010

Поскольку PHP обычно запускается через HTTP-запрос, вам нужно, чтобы кто-то / что-то выполнил много HTTP-запросов.

Я использую http://jmeter.apache.org/ в течение многих лет, и это очень ценно для этих сценариев.

0 голосов
/ 31 декабря 2010

Поскольку вы хотите тестировать соединения из PHP, вам следует запускать тесты с PHP.

Также вы хотите проверить загрузку из области MySQL, поэтому желательно запускать сценарий PHP с той же машины, на которой работает MySQL (если применимо).

Последнее замечание о «одновременности», вы, вероятно, должны использовать потоки. Лично я никогда не использовал потоки в PHP, но Google придумал этот php класс .

Я надеюсь, что это помогло.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...