永发信息网

PHP 连接数据库什么情况下才会用到持久链接 mysql

答案:1  悬赏:10  手机版
解决时间 2021-11-07 15:58
PHP 连接数据库什么情况下才会用到持久链接 mysql
最佳答案
持久的数据库连接是指在脚本结束运行时不关闭的连接。当收到一个持久连接的请求时。PHP
将检查是否已经存在一个(前面已经开启的)相同的持久连接。如果存在,将直接使用这个连接;如果不存在,则建立一个新的连接。所谓"相同"的连接是指用相同的用户名和密码到相同主机的连接。

对 web 服务器的工作和分布负载没有完全理解的读者可能会错误地理解持久连接的作用。特别的,持久连接不会在相同的连接上提供建立"用户会话"的能力,也不提供有效建立事务的能力。实际上,从严格意义上来讲,持久连接不会提供任何非持久连接无法提供的特殊功能。

为什么?

这和 web 服务器工作的方式有关。web 服务器可以用三种方法来利用 PHP 生成 web 页面。

第一种方法是将 PHP 用作一个单独运行的语言解释器(CGI Wapper)。以这种方法运行,PHP 会为向 web
服务器提出的每个 PHP 页面请求生成并结束一个 PHP解释器线程。由于该线程会随每个请求的结束而结束,因此任何在这个线程中利用的任何资源(例如指向SQL
数据库服务器的连接)都会随线程的结束而关闭。在这种情况下,使用持久连接和非持久连接没有任何区别——因为PHP脚本本身的执行不是持久的。

第二,也是最常用的方法,是把 PHP 用作多进程 web 服务器的一个模块,这种方法目前只适用于
Apache。对于一个多进程的服务器,其典型特征是有一个父进程和一组子进程协调运行,其中实际生成 web
页面的是子进程。每当客户端向父进程提出请求时,该请求会被传递给还没有被其它的客户端请求占用的子进程。这也就是说当相同的客户端第二次向服务端提出请求时,它将有可能被一个不同的子进程来处理。在开启了一个持久连接后,所有请求
SQL 服务的后继页面都能够重用这个已经建立的 SQL Server 连接。

最后一种方法是将 PHP 用作多线程 web 服务器的一个插件。目前 PHP 4 已经支持 ISAPI、WSAPI 和
NSAPI(在非Windows 环境下),这些使得 PHP 可以被用作诸如 Netscape FastTrack (iPlanet)、Microsoft's
Internet Information Server (IIS) 和 O'Reilly's WebSite Pro 等多线程 web
服务器的插件。持久连接的行为和前面所描述的多过程模型在本质上是相同的。注意 PHP 3 不支持 SAPI。

如果持久连接并没有任何附加的功能,那么使用它有什么好处?

答案非常简单——效率。当Web
Server创建到SQL服务器的连接耗费(Overhead)较高(如耗时较久,消耗临时内存较多)时,持久连接将更加高效。Overhead高低取决于很多因素。例如,数据库的种类,数据库服务和web
服务是否在同一台服务器上,SQL
服务器负载状况等。当Overhead较高,每次创建数据库连接成本较高时,持久连接将显著的提高效率。它使得每个子进程在其生命周期中只做一次连接操作,而非每次在处理一个页面时都要向SQL
服务器提出连接请求。这也就是说,每个子进程将对服务器建立各自独立的持久连接。例如,如果有 20 个不同的子进程运行某脚本建立了持久的 SQL
服务器持久连接,那么实际上向该 SQL 服务器建立了 20 个不同的持久连接,每个进程占有一个。

注意,如果持久连接的子进程数目超过了设定的数据库连接数限制,系统将会产生一些问题。如果数据库的同时连接数限制为
16,而在繁忙会话的情况下,有 17 个线程试图连接,那么有一个线程将无法连接。如果这个时候,在脚本中出现了使得连接无法关闭的错误(例如无限循环),则该数据库的
16 个连接将迅速地受到影响。请查阅使用的数据库的文档,以获取关于如何处理已放弃的及闲置的连接的方法。

Warning
在使用持久连接时还有一些特别的问题需要注意。例如在持久连接中使用数据表锁时,如果脚本不管什么原因无法释放该数据表锁,其随后使用相同连接的脚本将会被持久的阻塞,使得需要重新启动
httpd
服务或者数据库服务。另外,在使用事务处理时,如果脚本在事务阻塞产生前结束,则该阻塞也会影响到使用相同连接的下一个脚本。不管在什么情况下,都可以通过使用
register_shutdown_function()
函数来注册一个简单的清理函数来打开数据表锁,或者回滚事务。或者更好的处理方法,是不在使用数据表锁或者事务处理的脚本中使用持久连接,这可以从根本上解决这个问题(当然还可以在其它地方使用持久连接)。

以下是一点重要的总结。持久连接与常规的非持久连接应该是可以互相替换的。即将持久连接替换为非持久连接时,你的脚本的行为不应该发生改变。使用持久连接只应该改变脚本的效率,不应该改变其行为!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
火车单轨行车怎么双相交会
老子要出人头地小说txt全集免费下载
粮食部下岗职工最近文件待遇
440104199712183727李倩
实在是看不出来,谁来回答下,到底有多污~
渠县川鄂路邮政支局地址有知道的么?有点事想
张家口北方农产品电子商务有限公司怎么样?
梦见去仇人家退货是什么意思
在s7 200同一个程序中,可以对同一输出线圈多
鱼缸里能放水草吗
大众迈腾仪表盘显示这样是什么意思(图)?
2-3/11-8/11等于多少
轻质砖和泡沫砖的区别
怎么美白祛斑小偏方}
丰城新海洋还在招工吗?几班倒,工资多少
推荐资讯
田和寺合起来读什么
帮我用塔罗牌算我的财富
旅游意外保险是怎么赔付的?
租房没退房没交钥匙直接走了会怎么样,如果又
从国外进口燕窝有哪些流程 燕窝进口怎么操作
纪斯托罗夫斯基是哪个时候的著名作家?
不愤不启,不悱不发的思想最早出自哪里?
请问下,公务员九点上班的吗,那么他们中午吃
“诶”的读音是什么?
8的三次加9的三次一直加到100的三次
诗歌每个人的心里都有一个空
红烧油同鱼怎么做好吃
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?