2013-05-08 71 views
0

我想檢查Mysql連接限制與PHP。我插入mysql_connect內循環也mysql_pconnect,但它不會增加在mysql上的連接數....我也知道,php不支持多線程通過php對Mysql進行壓力測試

所以我怎麼能做到這一點,我優化mysql.ini文件爲最大連接,並希望通過壓力測試確保

+0

您使用的是msyqli嗎?如果是這樣,爲什麼你使用'mysql_connect'? – tadman 2013-05-08 15:17:13

+0

使用現有的基準測試工具可能會更好。從這裏開始:http://dev.mysql.com/doc/refman/5.0/en/mysql-benchmarks.html(這是針對mysql 5.0的,確保你選擇了正確的版本)。 – 2013-05-08 15:23:14

+0

@tadman plz在mysqli_connect的情況下告訴我是否有任何問題的解決方案......我使用mysql_connect而不是mysqli_connect,因爲它支持$ new_link .....但它($ new_link)也生成新的連接後關閉先前我沒有使用任何關閉連接命令任何地方在我的PHP腳本 – 2013-05-08 15:49:10

回答

2

mysql_connect的第四個參數是$ new_link。

默認情況下,如果在相同的請求中給定相同的參數,mysql_connect將不會創建新的鏈接,這就是您發生的情況。通過將$ new_link設置爲true覆蓋此行爲。

http://php.net/manual/en/function.mysql-connect.php

不要使用mysql_功能:The Mysql extension is deprecated and will be removed in the future. Use Mysqli or PDO.

編輯:添加mysql_警告

+0

我知道它已被棄用,我在mysql_connect中使用了$ new_link,我使用mysql_connect而不是mysqli_connect,因爲它在$ mysqli中支持$ new_link .....但它($ new_link)在關閉之前也會生成新的連接我不使用任何關閉連接命令 – 2013-05-08 15:25:31

+0

如果您知道它已被棄用,那麼您知道創建的代碼會在從PHP中刪除該函數時自毀。 – tadman 2013-05-08 17:44:39

+0

@ Engr.UmairAzizAttari「在關閉之前生成新連接」您確定嗎?在文檔中沒有關於這一點的內容,AFAIK並不是這樣。如果舊的連接句柄失效,那將會產生各種各樣的問題,並且會使$ new_link選項的用處無效。 – 2013-05-08 18:35:19

1

只需通過創建n連接到MySQL並不意味着你會得到任何有意義的結果。如果你在MySQL中有1000個連接作爲你的max_connections變量,並且你確實建立了1000個連接,那麼1001st將被拒絕。

此外,可以有999個連接不花費MySQL資源,1個可以運行超級昂貴的查詢。

關於PHP和多線程 - 不幸的是,你來了解錯誤。 PHP does support user-land multithreading

+0

保持在視圖中http://dev.mysql.com/doc/refman/5。7/en/too-many-connections.html我想在數據庫上建立連接並執行一些查詢我也改變了限制,但我怎麼測試 – 2013-05-08 15:22:43

+0

只需將連接限制降低到2,通過GUI連接到MySQL,然後通過PHP並測試你需要什麼。沒有必要實際超過151個連接。 – 2013-05-08 15:25:04

+0

參考我的鏈接Windows被限制爲(打開表格×2 +打開連接)<2048 ....我有不同情況下的隨機案例,並且想要超出限制到2000個併發連接....如果你知道任何壓力在PHP或任何其他軟件的邏輯轟炸與多個連接在mysql然後plz告訴 – 2013-05-08 15:29:40

1

這是一個簡單的PHP壓力測試工具,它創建一個測試表,將1000個條目加載到它中,選擇它們然後逐個刪除它們。與ab(apache基準測試)一起運行,您可以模擬數據庫的密集負載並比較幾臺服務器的性能。將其保存爲stress.php,更新連接信息,然後從瀏覽器運行它:

<pre> 
<?php 
$sStart = microtime(true); 

function random_str(){ 

$result=""; 
for ($i = 1; $i <= 16; $i++) { 
$base10Rand = mt_rand(0, 15); 
$newRand = base_convert($base10Rand, 10, 36); 
$result.=$newRand; 
} 
return $result; 

} 

if ($_REQUEST['db']=='mon2') { 
    mysql_connect ("server_test1", "db_user", "db_pass" || die (print 'no db'); 
} elseif ($_REQUEST['db']=='scooter') { 
    mysql_connect ("192.168.33.3331", "umbrella", "umbrella") || die (print 'no db'); 
} elseif ($_REQUEST['db']=='camilla') { 
    mysql_connect ("192.168.33.3332", "umbrella", "umbrella") || die (print 'no db'); 
} else { 
    die (print 'no server');  
} 
echo number_format(microtime(true) - $sStart, 2) ."s connect done\n";flush(); 
mysql_select_db ("test") || die (print 'no select_db'); 
$tbl_number=rand(1000, 9999); 

$query = "CREATE TABLE IF NOT EXISTS test_tbl_$tbl_number (test1 int(100) NOT NULL, test2 int(100) NOT NULL, test3 int(100) NOT NULL, test4 int(100) NOT NULL) ENGINE=MyISAM DEFAULT CHARSET=latin1;"; 
mysql_query($query) || die (print 'no query'); 
echo number_format(microtime(true) - $sStart, 2) ."s CREATE done\n";flush(); 
$aa=array(); 
for ($i=1; $i <= 1000; $i++) { 
$a=random_str(); 
$aa[]=$a; 
$b=random_str(); 
$c=random_str(); 
$d=random_str(); 
$query="INSERT INTO test_tbl_$tbl_number SET test1='$a', test2='$b', test3='$c', 
test4='$d'"; 
mysql_query($query) || die (print 'no insert'); 
} 
echo number_format(microtime(true) - $sStart, 2) ."s INSERT (1.000) 
done\n";flush(); 

$query="SELECT SQL_NO_CACHE * FROM test_tbl_$tbl_number"; 
mysql_query($query) || die (print 'no select_db'); 
echo number_format(microtime(true) - $sStart, 2) ."s SELECT (1) done\n";flush(); 

foreach ($aa as $value) { 
$query="DELETE FROM test_tbl_$tbl_number WHERE test1='$value'"; 
mysql_query($query) || die (print 'no delete'); 
} 
echo number_format(microtime(true) - $sStart, 2) ."s DELETE (1.000) 
done\n";flush(); 

$query="DROP TABLE test_tbl_$tbl_number"; 
mysql_query($query) || die (print 'no drop'); 
echo number_format(microtime(true) - $sStart, 2) ."s DROP (1.000) done\n";flush(); 

?> 
+0

不知道爲什麼更早的投票,但這正是我正在尋找測試我的PHP + MYSQL加載(使用AB)。也許投票是因爲它不是複製/粘貼的... – 2015-04-28 00:14:29