2013-05-08 69 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