0

PHPでMysql接続制限を確認したい。ループ内に mysql_connect と mysql_pconnect を挿入しましたが、Mysql の接続数は増加しません。また、php がマルチスレッドをサポートしていないことも知りました。

どうすればそれを行うことができますか、最大接続用に mysql.ini ファイルを最適化しており、ストレステストで確認したいと考えています

4

3 に答える 3

2

テスト テーブルを作成し、そこに 1000 エントリをロードし、それらを選択してから 1 つずつ削除する PHP のシンプルなストレス テスト ツールを次に示します。ab (apache ベンチマーク) と一緒に実行すると、DB への集中的な負荷をシミュレートし、複数のサーバーのパフォーマンスを比較できます。これを 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();

?>
于 2013-09-25T11:11:43.147 に答える