mysql 永久连接mysql_pconnect和mysql_connect
转自: <p align="left"><span style="color:#262626;">? ? ? ?<span style="color:#262626;">一直对<span style="color:#262626;">mysql_pconnect <p align="left"><span style="color:#262626;"> <p align="left"><span style="color:#262626;">?1<span style="color:#262626;">、定义: <p align="left"><span style="color:#262626;">永久的数据库连接是指在脚本结束运行时不关闭的连接。当收到一个永久连接的请求时。<span style="color:#262626;">PHP <span style="color:#262626;">将检查是否已经存在一个(前面已经开启的)相同的永久连接。如果存在,将直接使用这个连接;如果不存在,则建立一个新的连接。所谓<span style="color:#262626;">“<span style="color:#262626;">相同<span style="color:#262626;">”<span style="color:#262626;">的连接是指用相同的用户名和密码到相同主机的连接。 <p align="left"><span style="color:#262626;"> <p align="left"><span style="color:#262626;">?2<span style="color:#262626;">、先看看手册上的总结: <p align="left"><span style="color:#262626;">??? ?<span style="color:#262626;">永久连接是为通常连接建立一对一的分布而设计的。这意味着必须能够保证在将永久连接替换为非永久连接时,脚本的行为不会改变。使用永久连接将(非常)有可能改变脚本的效率,但不改变其行为! <p align="left"><span style="color:#262626;"> <p align="left"><span style="color:#262626;">?3<span style="color:#262626;">、如果永久连接并没有任何附加的功能,那么使用它有什么好处? <p align="left"><span style="color:#262626;">??? ?<span style="color:#262626;">答案非常简单<span style="color:#262626;">――<span style="color:#262626;">效率。当客户端对<span style="color:#262626;"> SQL <span style="color:#262626;">服务器的连接请求非常频繁时,永久连接将更加高效。连接请求频繁的标准取决于很多因素。例如,数据库的种类,数据库服务和<span style="color:#262626;"> web <span style="color:#262626;">服务是否在同一台服务器上,<span style="color:#262626;">SQL <span style="color:#262626;">服务器如何加载负载等。但我们至少知道,当连接请求很频繁时,永久连接将显著的提高效率。它使得每个子进程在其生命周期中只做一次连接操作,而非每次在处理一个页面时都要向<span style="color:#262626;"> SQL <span style="color:#262626;">服务器提出连接请求。这也就是说,每个子进程将对服务器建立各自独立的永久连接。<span style="color:#262626;">例如,如果有<span style="color:#262626;"> 20 <span style="color:#262626;">个不同的子进程运行某脚本建立了永久的<span style="color:#262626;"> SQL <span style="color:#262626;">服务器永久连接,那么实际上向该<span style="color:#262626;"> SQL <span style="color:#262626;">服务器建立了<span style="color:#262626;"> 20 <span style="color:#262626;">个不同的永久连接,每个进程占有一个。 <p align="left"><span style="color:#262626;"> <p align="left"><span style="color:#262626;">4<span style="color:#262626;">、注意: <p align="left"><span style="color:#262626;">?? <span style="color:#262626;">如果永久连接的子进程数目超过了设定的数据库连接数限制,系统将会产生一些缺陷。如果数据库的同时连接数限制为<span style="color:#262626;"> 16<span style="color:#262626;">,而在繁忙会话的情况下,有<span style="color:#262626;"> 17 <span style="color:#262626;">个线程试图连接,那么有一个线程将无法连接。如果这个时候,在脚本中出现了使得连接无法关闭的错误(例如无限循环),则该数据库的<span style="color:#262626;"> 16 <span style="color:#262626;">个连接将迅速地受到影响。请查阅使用的数据库的文档,以获取关于如何处理已放弃的及闲置的连接的方法。 <p align="left"><span style="color:#262626;"> <p align="left"><span style="color:#262626;">?5<span style="color:#262626;">、警告: <p align="left"><span style="color:#262626;">??? <span style="color:#262626;">在使用永久连接时还有一些特别的问题需要注意。例如在永久连接中使用数据表锁时,如果脚本不管什么原因无法释放该数据表锁,其随后使用相同连接的脚本将会被永久的阻塞,使得需要重新启动<span style="color:#262626;"> httpd <span style="color:#262626;">服务或者数据库服务。另外,在使用事务处理时,如果脚本在事务阻塞产生前结束,则该阻塞也会影响到使用相同连接的下一个脚本。不管在什么情况下,都可以通过使用<span style="color:#262626;"> register_shutdown_function() <span style="color:#262626;">函数来注册一个简单的清理函数来打开数据表锁,或者回滚事务。或者更好的处理方法,是不在使用数据表锁或者事务处理的脚本中使用永久连接,这可以从根本上解决这个问题(当然还可以在其它地方使用永久连接)。 <p align="left"><span style="color:#262626;">? <p align="left"><span style="color:#262626;">?<span style="color:rgb(38,38,38);">?6<span style="color:rgb(38,38);">、<span style="color:rgb(38,38);">web <span style="color:rgb(38,38);">服务器可以用三种方法来利用<span style="color:rgb(38,38);"> PHP <span style="color:rgb(38,38);">生成<span style="color:rgb(38,38);"> web <span style="color:rgb(38,38);">页面。 <p align="left"><span style="color:#262626;">?<span style="color:#262626;">(<span style="color:#262626;">1<span style="color:#262626;">)第一种方法是将<span style="color:#262626;"> PHP <span style="color:#262626;">用作一个<span style="color:#262626;">“<span style="color:#262626;">外壳<span style="color:#262626;">”<span style="color:#262626;">。以这种方法运行,<span style="color:#262626;">PHP <span style="color:#262626;">会为向<span style="color:#262626;"> web <span style="color:#262626;">服务器提出的每个<span style="color:#262626;"> PHP <span style="color:#262626;">页面请求生成并结束一个<span style="color:#262626;"> PHP <span style="color:#262626;">解释器线程。由于该线程会随每个请求的结束而结束,因此任何在这个线程中利用的任何资源(例如指向<span style="color:#262626;"> SQL <span style="color:#262626;">数据库服务器的连接)都会随线程的结束而关闭。在这种情况下,使用永久连接不会获得任何地改变<span style="color:#262626;">――<span style="color:#262626;">因为它们根本不是永久的。 <p align="left"><span style="color:#262626;">(<span style="color:#262626;">2<span style="color:#262626;">)也是最常用的方法,是把<span style="color:#262626;"> PHP <span style="color:#262626;">用作多进程<span style="color:#262626;"> web <span style="color:#262626;">服务器的一个模块,这种方法目前只适用于<span style="color:#262626;"> Apache<span style="color:#262626;">。对于一个多进程的服务器,其典型特征是有一个父进程和一组子进程协调运行,其中实际生成<span style="color:#262626;"> web <span style="color:#262626;">页面的是子进程。每当客户端向父进程提出请求时,该请求会被传递给还没有被其它的客户端请求占用的子进程。这也就是说当相同的客户端第二次向服务端提出请求时,它将有可能被一个不同的子进程来处理。在开启了一个永久连接后,所有请求<span style="color:#262626;"> SQL <span style="color:#262626;">服务的后继页面都能够重新使用这个已经建立的<span style="color:#262626;"> SQL Server <span style="color:#262626;">连接。
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- MYSQL教程MySQL大内存配置方案 如my-medium.ini、my-huge.i
- MYSQL教程MySQL常见的底层优化操作教程及相关建议
- mysql表空间传输(ERROR 1808) row_format设置
- MySQL使用LIMIT限制查询结果的数量
- MYSQL数据库LNMP下使用命令行导出导入MySQL数据库的方法
- mysql – 在SQL中添加一个临时列,其中值取决于另一列
- Mysql实例Mysql5.7在Centos6中的安装方法
- MYSQL教程MySQL 大数据量快速插入方法和语句优化分享
- 显示当前的SQL Server用户名
- ResultSet is from UPDATE. No Data.