日期:2014-05-17  浏览次数:20655 次

请教如何关闭mysql_pconnect长连接?
我在php连接数据库的时候,因为要采集数据很慢,我使用mysql_connect连接数据库,在本地电脑测试一切正常,但在虚拟主机就提示服务器失去响应,后来我换成mysql_pconnect长连接就正常了,但是最近发现老是打不开页面,我怀疑是不是mysql_pconnect这个长连接把资源耗完了?
因为我在文档上查,mysql_pconnect这个是无法使用mysql_close来关闭的?

如此说来,使用mysql_pconnect岂不是很危险?一旦调用了这个函数就完全无法关闭这个连接了?直到资源耗完?

谢谢!!

------解决方案--------------------
php 连接 mysql 是分为两步走的
第一步:建立 php 到 mysql 服务器的 tcp/ip 通道 物理通道
第二步:登录 mysql 服务器,建立到数据库的通道 逻辑通道

无论是长连接还是短连接,php 程序都会关闭逻辑通道
短连接会同时关闭物理通道
而长连接会将物理通道保存起来,以备再次使用

当发起长连接的时候,会先检查是否有空闲的物理通道,如果有就利用,否则再建一个物理通道
而物理通道从开始闲置到能被再次使用,是需要一定的时间的(需要与mysql沟通后才能确定,这个工作要在mysql相对空闲时完成)。所以当mysql与php同在一台机器上时,由于没有真正的网络通讯响应极其迅速,几乎没有时间使闲置的物理通道处于备选状态。从而导致大量的资源被占用,而使系统崩溃
而在mysql与php不在同一机器时,就没有(或极少有)这种情况发生

------解决方案--------------------
可以看这篇文章,对mysql_pconnect可以了解多一些。
http://www.cnblogs.com/funlake/archive/2011/09/08/2171822.html