西部数码主机 | 阿里云主机| 虚拟主机 | 服务器 | 返回乐道官网
当前位置: 主页 > 开发教程 > mysql教程 >

mysql查询超时PHP执行效率分析比较

时间:2015-05-18 21:03来源:未知 作者:好模板 点击:
近来遇到一个问题,就是在高并发下,mysql功能呈现了瓶颈,由于PHP是一种弱类型的言语,没有类型一说。因而,当mysql回来并非预期成果时,会致使后续逻辑过错。 1)线程堵塞测验

近来遇到一个问题,就是在高并发下,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)总结

函数名称 线程堵塞 锁堵塞
mysql_connect 函数值回来false,并抛出一个warning等级过错,并不会停止程序。 回来resource(3, mysql link),正常
mysql_query 函数值回来false,并抛出一个warning等级过错,并不会停止程序。假如mysql_connect回来false,即便衔接被开释,mysql_query不会从头衔接到mysql 回来false,但不抛出反常。对正常的mysql_query,履行失利回来false。程序中应当判断这种过错。

(责任编辑:好模板)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
热点内容