2010-12-31 19 views
7

Zapytanie o wstawianie jest ciągle rejestrowane w moim dzienniku powolnego zapytania MySQL.
Chcę zobaczyć, ile czasu zajmuje zapytanie INSERT przy 100 równoczesnych operacjach wstawiania (do tej samej tabeli).PHP: Symulacja wielu połączeń MySQL z tą samą bazą danych

Muszę więc zasymulować poniższe.
500 różnych jednoczesnych połączeń z PHP do tej samej bazy danych na serwerze mysql, z których wszystkie wstawiają wiersz (jednocześnie) do tej samej tabeli.

Czy muszę użyć dowolnego narzędzia do testowania obciążenia? Czy mogę po prostu napisać skrypt PHP, aby to zrobić?

Jakieś myśli?

PS: Używam apache w systemie Windows.

+0

należy wskazać, jaki rodzaj silnika bazy danych, które spowodowane przez powolne wstawić, a prace na schemacie tabeli zamiast robić powyższy – ajreal

Odpowiedz

3

Jeśli zainstalowałeś Apache w systemie Windows, powinieneś mieć narzędzie do testowania apache (ab.exe). Utwórz skrypt php, aby wstawić wiersz i udostępnić go poprzez: http://127.0.0.1/insert.php. Przetestuj 100 jednoczesnych połączeń, uruchamiając tę ​​komendę ab:

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

To powinno uruchomić te 100 przekładek jednocześnie za pośrednictwem skryptu php.

+0

To pracował dla mnie. – Varun

1

Ponieważ PHP jest zwykle wyzwalane za pomocą żądania HTTP, potrzebujesz kogoś/czegoś do wydawania wielu żądań HTTP.

Używam od lat http://jmeter.apache.org/ i jest to bardzo cenne dla tych scenariuszy.

0

Ponieważ chcesz przetestować połączenia z PHP, powinieneś uruchomić testy z PHP.

Również chcesz przetestować obciążenie z zakresu MySQL, więc najlepiej uruchomić skrypt PHP z tego samego komputera, na którym działa MySQL (jeśli dotyczy).

Jeszcze jedna uwaga na temat "jednocześnie", prawdopodobnie powinieneś używać wątków. Osobiście nigdy nie użyłem wątków w PHP, ale google wymyślił ten php class.

Mam nadzieję, że to pomogło.

2

Czy używasz PHP5.3?

Nowy sterownik MySQL (mysqlnd) może obsługiwać zapytania równoległe.

Spróbuj tego:

<?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)); 
+0

Dobra odpowiedź! Możesz przeczytać o dostępności instalacji i wersji PHP tutaj: http://php.net/manual/en/mysqlnd.install.php –

Powiązane problemy