簡體   English   中英

PHP:模擬與同一數據庫的多個MySQL連接

[英]PHP: Simulate multiple MySQL connections to same database

我的MySQL慢查詢日志中不斷記錄插入查詢。
我想看看INSERT查詢花了多少時間進行100次同時插入操作(到同一個表)。

所以我需要模擬下面的內容。
從PHP到mysql服務器上的同一數據庫的500個不同的同時連接,所有這些連接都在同一個表中插入一行(同時)。

我需要使用任何負載測試工具嗎? 或者我可以簡單地編寫一個PHP腳本來執行此操作嗎?

有什么想法嗎?

PS:我在Windows上使用apache。

如果您在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個插入。

你使用的是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));

由於PHP通常是通過HTTP請求觸發的,因此您需要某人/某事來發出許多HTTP請求。

我多年來一直在使用http://jmeter.apache.org/ ,這對於這些場景非常有價值。

由於您要測試PHP的連接,因此您應該使用PHP運行測試。

您還想測試MySQL范圍的負載,因此最好從MySQL運行的同一台機器上運行PHP腳本(如果適用)。

關於“同時”事情的最后一個注意事項,你應該使用線程。 我個人從來沒有在PHP中使用過線程,但谷歌想出了這個php類

我希望這有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM