mysql查询超时对PHP执行的影响
来源:互联网 发布:软件配置管理办法 编辑:程序博客网 时间:2024/05/16 00:29
最近遇到一个问题,就是在高并发下,mysql性能出现了瓶颈,由于PHP是一种弱类型的语言,没有类型一说。因此,当mysql返回并非预期结果时,会导致后续逻辑错误。
1)线程阻塞测试
当sql语句执行太慢,会导致mysql的连接数被耗尽,无法处理新的请求。
测试方法
执行set global max_connections=1;语句,并在另一个程序中开启长连接占用该连接,此时,mysql服务已经无连接可用。
PHP代码如下:
<?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 7Call 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:7NULLdone!PHP Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in D:\test\mysql-index\timeout.php on line 7PHP Stack trace:PHP 1. {main}() D:\test\mysql-index\timeout.php:0PHP 2. mysql_fetch_assoc() D:\test\mysql-index\timeout.php:7mysql_query返回了false,此时如果强制使用mysql_fetch_assoc等获取结果的函数,将会返回NULL
3)总结
正常mysql_query函数值返回false,并抛出一个warning级别错误,并不会终止程序。如果mysql_connect返回false,即使连接被释放,mysql_query不会重新连接到mysql返回false,但不抛出异常。
对正常的mysql_query,
执行失败返回false。
程序中应当判断这种错误。
0 0
- mysql查询超时对PHP执行的影响
- mysql flush table 对查询的影响
- mysql中的索引对查询的影响
- PHP中的异常处理对程序执行效率的影响
- 数据分布对MySQL执行计划的影响
- Precision和Length对MySQL执行结果的影响
- Mysql查询语句中的引号对索引的影响
- 应用程序对Sqlserver进行SQL查询使用与不使用参数对执行计划的影响
- 【原创】PHP访问MySQL查询超时处理
- PHP访问MySQL查询超时处理
- PHP访问MySQL查询超时处理
- PHP访问MySQL查询超时处理
- PHP访问MySQL查询超时处理
- PHP访问MySQL查询超时处理
- sql优化(查询条件的变化对执行计划的影响)
- PHP执行超时后的处理
- 设置PHP 脚本执行超时的时间
- PHP脚本执行超时的解决办法
- 【分治法】分治法与二分搜索,棋盘覆盖问题
- smbpasswd: command not found
- 当用户禁用了cookies时 session如何保存记录
- hadoop中读取protobuf数据
- Android 获取某apk的签名信息,可用作防盗版进入。
- mysql查询超时对PHP执行的影响
- XML在参数中的应用-3
- android监听新安装应用
- SQLite数据库的操作
- Mysql 查看连接数,状态
- Oracle 11G R2 在windows server 2008 64位安装时提示:无法在windows "开始"菜单或桌面上创建项
- mybaties第一个例子
- linux安装mysql
- Android中Activity的切换动画(非overridePendingTransition)