mysql 永久连接mysql_pconnect和mysql_connect

mysql 永久连接mysql_pconnect和mysql_connect,第1张

概述转自:http://blog.csdn.net/lxzo123/article/details/6590893       一直对mysql_pconnect和mysql_connect的理解差别是p链接是持久链接,不会关闭了链接,即使你使用了mysql_close();建立连接后,将保持sleep状态,可以使用showprocesslist 查看有哪些正在sleep的连接,这样p链接的好处是当有新的请求时就直接返回这个连接,感觉类似于http1.1协议的keep-alive的用法,到底是开个还是关呢还是不关呢,一般那些专家都告诉你,当用户量不多时,可以打开keep-live 这样可以,在http协议进行打交道时,给用户保持连接。用户第一次打开建立,然后继续浏览时就不需要新开了,提高用户的体验,当用户量比较大的时候,大量的保持连接会给服务器造成很大压力,所以需要找一个平衡点是开到底还是不开,回过头来看mysql_p的理解:在网上搜索了没有找到满意的答案,但是在竟然在手册上看到一个解释的比较完美的,看来以后应该多看手册: 1、定义:永久的数据库连接是指在脚本结束运行时不关闭的连接。当收到一个永久连接的请求时。PHP将检查是否已经存在一个(前面已经开启的)相同的永久连接。如果存在,将直接使用这个连接;如果不存在,则建立一个新的连接。所谓“相同”的连接是指用相同的用户名和密码到相同主机的连接。 2、先看看手册上的总结:     永久连接是为通常连接建立一对一的分布而设计的。这意味着必须能够保证在将永久连接替换为非永久连接时,脚本的行为不会改变。使用永久连接将(非常)有可能改变脚本的效率,但不改变其行为! 3、如果永久连接并没有任何附加的功能,那么使用它有什么好处?     答案非常简单――效率。当客户端对 SQL服务器的连接请求非常频繁时,永久连接将更加高效。连接请求频繁的标准取决于很多因素。例如,数据库的种类,数据库服务和 web服务是否在同一台服务器上,SQL服务器如何加载负载等。但我们至少知道,当连接请求很频繁时,永久连接将显著的提高效率。它使得每个子进程在其生命周期中只做一次连接 *** 作,而非每次在处理一个页面时都要向 SQL服务器提出连接请求。这也就是说,每个子进程将对服务器建立各自独立的永久连接。例如,如果有 20个不同的子进程运行某脚本建立了永久的 SQL服务器永久连接,那么实际上向该 SQL服务器建立了 20个不同的永久连接,每个进程占有一个。4、注意:   如果永久连接的子进程数目超过了设定的数据库连接数限制,系统将会产生一些缺陷。如果数据库的同时连接数限制为 16,而在繁忙会话的情况下,有 17个线程试图连接,那么有一个线程将无法连接。如果这个时候,在脚本中出现了使得连接无法关闭的错误(例如无限循环),则该数据库的 16个连接将迅速地受到影响。请查阅使用的数据库的文档,以获取关于如何处理已放弃的及闲置的连接的方法。 5、警告:    在使用永久连接时还有一些特别的问题需要注意。例如在永久连接中使用数据表锁时,如果脚本不管什么原因无法释放该数据表锁,其随后使用相同连接的脚本将会被永久的阻塞,使得需要重新启动 httpd服务或者数据库服务。另外,在使用事务处理时,如果脚本在事务阻塞产生前结束,则该阻塞也会影响到使用相同连接的下一个脚本。不管在什么情况下,都可以通过使用 register_shutdown_function()函数来注册一个简单的清理函数来打开数据表锁,或者回滚事务。或者更好的处理方法,是不在使用数据表锁或者事务处理的脚本中使用永久连接,这可以从根本上解决这个问题(当然还可以在其它地方使用永久连接)。   6、web服务器可以用三种方法来利用 PHP生成 web页面。 (1)第一种方法是将 PHP用作一个“外壳”。以这种方法运行,PHP会为向 web服务器提出的每个 PHP页面请求生成并结束一个 PHP解释器线程。由于该线程会随每个请求的结束而结束,因此任何在这个线程中利用的任何资源(例如指向 SQL数据库服务器的连接)都会随线程的结束而关闭。在这种情况下,使用永久连接不会获得任何地改变――因为它们根本不是永久的。(2)也是最常用的方法,是把 PHP用作多进程 web服务器的一个模块,这种方法目前只适用于 Apache。对于一个多进程的服务器,其典型特征是有一个父进程和一组子进程协调运行,其中实际生成 web页面的是子进程。每当客户端向父进程提出请求时,该请求会被传递给还没有被其它的客户端请求占用的子进程。这也就是说当相同的客户端第二次向服务端提出请求时,它将有可能被一个不同的子进程来处理。在开启了一个永久连接后,所有请求 SQL服务的后继页面都能够重新使用这个已经建立的 SQL Server连接。(3)最后一种方法是将 PHP用作多线程 web服务器的一个插件。目前 PHP 4已经支持 ISAPI、WSAPI和 NSAPI(在 Windows环境下),这些使得 PHP可以被用作诸如 Netscape FastTrack (iPlanet)、Microsoft's Internet InformationServer (IIS)和 O'Reilly's WebSite Pro等多线程 web服务器的插件。永久连接的行为和前面所描述的多过程模型在本质上是相同的。注意 PHP 3不支持 SAPI。

转自:href="http://blog.csdn.net/lxzo123/article/details/6590893" rel="nofollow">http://blog.csdn.net/lxzo123/article/details/6590893

<p align="left"><span >       <span >一直对<span >MysqL_pconnect
<span >和<span >MysqL_connect<span >的理解差别是<span >p<span >链接是持久链接,不会关闭了链接,即使你使用了<span >MysqL_close();<span >建立连接后,将保持<span >sleep<span >状态,可以使用<span >show
processList <span >查看有哪些正在<span >sleep<span >的连接,这样<span >p<span >链接的好处是当有新的请求时就直接返回这个连接,感觉类似于<span >http1.1<span >协议的<span >keep-alive<span >的用法,到底是开个还是关呢还是不关呢,一般那些专家都告诉你,当用户量不多时,可以打开<span >keep
-live <span >这样可以,在<span >http<span >协议进行打交道时,给用户保持连接。用户第一次打开建立,然后继续浏览时就不需要新开了,提高用户的体验,当用户量比较大的时候,大量的保持连接会给服务器造成很大压力,所以需要找一个平衡点是开到底还是不开,回过头来看<span >MysqL_p
<span >的理解:在网上搜索了没有找到满意的答案,但是在竟然在手册上看到一个解释的比较完美的,看来以后应该多看手册:


<p align="left"><span >


<p align="left"><span > 1<span >、定义:


<p align="left"><span >永久的数据库连接是指在脚本结束运行时不关闭的连接。当收到一个永久连接的请求时。<span >PHP
<span >将检查是否已经存在一个(前面已经开启的)相同的永久连接。如果存在,将直接使用这个连接;如果不存在,则建立一个新的连接。所谓<span >“<span >相同<span >”<span >的连接是指用相同的用户名和密码到相同主机的连接。


<p align="left"><span >


<p align="left"><span > 2<span >、先看看手册上的总结:


<p align="left"><span >     <span >永久连接是为通常连接建立一对一的分布而设计的。这意味着必须能够保证在将永久连接替换为非永久连接时,脚本的行为不会改变。使用永久连接将(非常)有可能改变脚本的效率,但不改变其行为!


<p align="left"><span >


<p align="left"><span > 3<span >、如果永久连接并没有任何附加的功能,那么使用它有什么好处?


<p align="left"><span >     <span >答案非常简单<span >――<span >效率。当客户端对<span > sql
<span >服务器的连接请求非常频繁时,永久连接将更加高效。连接请求频繁的标准取决于很多因素。例如,数据库的种类,数据库服务和<span > web
<span >服务是否在同一台服务器上,<span >sql
<span >服务器如何加载负载等。但我们至少知道,当连接请求很频繁时,永久连接将显著的提高效率。它使得每个子进程在其生命周期中只做一次连接 *** 作,而非每次在处理一个页面时都要向<span > sql
<span >服务器提出连接请求。这也就是说,每个子进程将对服务器建立各自独立的永久连接。<span >例如,如果有<span > 20
<span >个不同的子进程运行某脚本建立了永久的<span > sql
<span >服务器永久连接,那么实际上向该<span > sql
<span >服务器建立了<span > 20
<span >个不同的永久连接,每个进程占有一个。


<p align="left"><span >


<p align="left"><span >4<span >、注意:


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


<p align="left"><span >


<p align="left"><span > 5<span >、警告:


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


<p align="left"><span > 


<p align="left"><span > <span > 6<span >、<span >web
<span >服务器可以用三种方法来利用<span > PHP
<span >生成<span > web
<span >页面。


<p align="left"><span > <span >(<span >1<span >)第一种方法是将<span > PHP
<span >用作一个<span >“<span >外壳<span >”<span >。以这种方法运行,<span >PHP
<span >会为向<span > web
<span >服务器提出的每个<span > PHP
<span >页面请求生成并结束一个<span > PHP
<span >解释器线程。由于该线程会随每个请求的结束而结束,因此任何在这个线程中利用的任何资源(例如指向<span > sql
<span >数据库服务器的连接)都会随线程的结束而关闭。在这种情况下,使用永久连接不会获得任何地改变<span >――<span >因为它们根本不是永久的。


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

总结

以上是内存溢出为你收集整理的mysql 永久连接mysql_pconnect和mysql_connect全部内容,希望文章能够帮你解决mysql 永久连接mysql_pconnect和mysql_connect所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1169474.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存