PHP的mysql_connect与mysql_pconnect_PHP教程

php中文网
发布: 2016-07-13 10:33:00
原创
1021人浏览过

mysql_pconnect是用来在php与mysql间建立一条持续连接, 一般php的执行模式是脚本开始执行时初始化所有资源, 脚本运行结束后释放所有资源。 而mysql_pconnect的方式则不这样, mysql_connect每次都是重新通过tcp 或者unix domian socket跟sql服务器建立关系, 每次握手都是要消耗不少服务器资源的。

使用pconnect时, 有请求连接mysql时, php会检查是否之前有条相同的连接(以相同的用户名密码连接到同一个mysql服务器)已经建立, 如果有的话就直接使用这条连接, 值得注意的是这个相同的连接的概念是对进程来说的, 不同的进程call mysql_pconnect建立会建立起多条连接。

connect与pconnect不会带来功能的差异, 只有性能上的差别。

一般php有俩种运行模式, 一是作为cgi运行, 二是作为apache的模块运行。 作为cgi的时候connect跟pconnect没什么不同, 因为每次cgi进行运行结束后都会被销毁清理掉资源。

php作为apache模块方式运行时, 可以使用到数据库持续连接, 但可能会存在潜在的问题。

立即学习PHP免费学习笔记(深入)”;

豆包AI编程
豆包AI编程

豆包推出的AI编程助手

豆包AI编程 483
查看详情 豆包AI编程

假设mysql服务器被配置为最大支持10个并发。 而apache被配置为使用100个子进程。

apache由一个父进程来协调将收到的http request分发给哪个空闲中的子进程处理, 这样很快处理了10个http请求, 假设10个都分配给了不同的子进程, 那末10条跟mysql间的持久连接就建立了, mysql的能力已经到了极限。这时又来了一个http请求, apache将它分给其他的任意不在这10个子进程中的进程, 那末这个进程就没有办法建立到mysql的连接了, 因为坑位已经满了。

使用持久连接还会有其他方面的问题。

如果在你脚本中使用了持久连接, 又进行了锁表操作的话, 如果到脚本结束也没有去解锁的话。 那么下次再运行这个脚本的话, 它为了获得lock table会在那里无尽地等待过去的它unlock table, 过去的它已经不能回来了, 这里成了个死循环。 除非重启web或者mysql服务器。 另一个会造成锁定的就是事务了。

避免这个东东的办法可以用register_shutdown_function来注册个回调函数, 在这里面释放表锁定, 或回滚事务。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/752587.htmlTechArticlemysql_pconnect是用来在php与mysql间建立一条持续连接, 一般php的执行模式是脚本开始执行时初始化所有资源, 脚本运行结束后释放所有资源。...
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号