近来遇到一个问题,就是在高并发下,mysql功能呈现了瓶颈,由于PHP是一种弱类型的言语,没有类型一说。因而,当mysql回来并非预期成果时,会致使后续逻辑过错。 1)线程堵塞测验 当sql句子履行太慢,会致使mysql的衔接数被耗尽,无法处理新的请求。 测验方法 履行set global max_connections=1;句子,并在另一个程序中开启长衔接占用该衔接,此刻,mysql效劳现已无衔接可用。 PHP代码如下:
$con=mysql_connect('127.0.0.1','root','');
var_dump($con);
sleep(10);
mysql_select_db('test',$con); $cursor=mysql_query("select * from `timeout_test` where `id`=2 for update");
var_dump($cursor);
var_dump(mysql_fetch_assoc($cursor)); echo "done!";
回来成果,mysql_connect 和mysql_query都回来false过错 2)锁堵塞测验 康复正常的衔接数,履行set autocomit=0; 我使用的是innodb引擎,myisam引擎没有业务概念,autocomit的值在myisam下总为1。 在mysql衔接中,履行句子: mysql> select * from `timeout_test` where `id`=2 for update; +----+------+ | id | name | +----+------+ | 2 | kk | +----+------+ 1 row in set (0.00 sec) 接下来,履行上述PHP,回来成果如下: resource(5) of type (mysql link) bool(false) Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in D:\test\mysql-index\timeout.php on line 7 Call Stack: 0.0002 234472 1. {main}() D:\test\mysql-index\timeout.php:0 51.1252 242496 2. mysql_fetch_assoc() D:\test\mysql-index\timeout.php:7 NULL done!PHP Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in D:\test\mysql-index\timeout.php on line 7 PHP Stack trace: PHP 1. {main}() D:\test\mysql-index\timeout.php:0 PHP 2. mysql_fetch_assoc() D:\test\mysql-index\timeout.php:7 mysql_query回来了false,此刻假如强行使用mysql_fetch_assoc等获取成果的函数,将会回来NULL 3)总结
(责任编辑:好模板) |