2010-12-31 2 views
7

삽입 쿼리가 MySQL의 저속 쿼리 로그에 지속적으로 기록됩니다.
INSERT 쿼리가 (동일한 테이블에 대해) 100 개의 동시 삽입 작업을 수행하는 데 걸린 시간을 확인하고 싶습니다.PHP : 동일한 데이터베이스에 여러 개의 MySQL 연결 시뮬레이션

그래서 다음을 시뮬레이션해야합니다.
PHP에서 mysql 서버의 동일한 데이터베이스에 대해 서로 다른 500 개의 동시 연결 (모두 동일한 테이블에 동시에 행을 삽입 함).

로드 테스트 도구를 사용해야합니까? 아니면 간단히 PHP 스크립트를 작성하여이 작업을 수행 할 수 있습니까?

의견이 있으십니까?

추신 : Windows에서 아파치를 사용하고 있습니다.

+0

대신이 나를 위해 일한 위 – ajreal

답변

3

Windows에 아파치를 설치했다면, 아파치 벤치 마크 도구 (ab.exe)가 있어야합니다. 행을 삽입하고 http://127.0.0.1/insert.php 통해 액세스 할 수 있도록 PHP 스크립트를 만듭니다. 이 ab 명령을 실행하여 100 개의 동시 연결을 테스트하십시오.

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

PHP 스크립트를 통해 100 개의 삽입을 동시에 실행해야합니다.

+0

을하는 테이블 스키마에 어떤 느린 삽입에 의한 데이터베이스 엔진의 종류, 작업을 표시해야합니다. – Varun

1

PHP는 일반적으로 HTTP 요청을 통해 트리거되므로 많은 HTTP 요청을 발행하려면 누군가/무언가가 필요합니다.

나는 수년간 http://jmeter.apache.org/을 사용해 왔으며,이 시나리오에서는 매우 유용합니다.

0

PHP에서 연결을 테스트하려면 PHP로 테스트를 실행해야합니다.

MySQL 범위에서로드를 테스트하려는 경우 MySQL이 실행되는 동일한 머신에서 PHP 스크립트를 실행해야합니다 (해당되는 경우).

"동시"일에 대해 마지막으로 한 마디로, 아마도 스레드를 사용해야합니다. 개인적으로 PHP에서 스레드를 사용한 적이 없지만 google은 php class과 함께 나타납니다.

도움이 되었기를 바랍니다.

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

좋은 답변입니다! 설치 및 PHP 버전 사용 가능 여부는 http://php.net/manual/en/mysqlnd.install.php에서 확인할 수 있습니다. –

관련 문제