php的pconnect()

PHP在連結MYSQL時有兩個FUNCTION
CONNECT與PCONNECT
這兩個函式的差別在哪裡?
一般的標準答案都是:
PCONNECT是持續性的連接,PHP會重複使用已經存在的資料庫連線

但是再追問下去,能說得出來的人就少了許多
常見的疑問有:
什麼時候要用CONNECT什麼時候用PCONNECT?
mysql_close何時使用?
為什麼DATABASE上有一堆SLEEP的PROCESS?
明明用PCONNECT為何每次RESOURCE ID都不同?

先回歸到最簡單的解釋,pconnect會去檢查是否有已經存在的資料庫連線。
若有,就使用舊的連線;若無,就新開啟一個連線
但是這裡所說得檢查連線,是指這一個APACHE行程所開啟的資料庫連線
而不是這一台WEB SERVER所開啟的資料庫連線。
一台WEB SERVER上可能有上百個APAHE行程(2.0預設最大150個)
也就是說 在最大情況下可能會有上百個PCONNECT造成的資料庫連線
(實際上會遠少於此)
所以同樣使用PCONNECT是會出現不同RESOURCE ID的
因為他可能是在不同行程上面執行

而PCONNECT是不會在查詢完成後就關閉,而是會等待一定時間
這個時間可以由MYSQL上的wait_timeout設定
而且mysql_close並無法關閉pconnect所開啟的連線,只能關閉connect所開啟的資料庫連線。當然如果沒有CLOSE在經過TIMEOUT時間之後也是會被DB DROP掉。

PCONNECT必須要小心使用,在寫的不好的CODE中,會殘留一大批的DATABASE CONNECTION。最大值可以這樣計算
每台SERVER的APACHE行程數 * 所有WEB SERVEWR數量
當然不需要我來提醒,每個連線都會消耗DB的CPU TIME與MEMORY

寫WEB CODE時,不論使用何種語言,有兩點一定要再動手寫之前先有答案
一是,要從DATABASE抓取什麼資料
二是,要傳送什麼資料到USER端
(其實這也不只用於WEB)
DATABASE的連線是很慢的,能夠一次抓取完所需的資料,就不要分兩次

时间: 2024-10-30 10:48:37

php的pconnect()的相关文章

数据库读写分离

随着一 个网站的业务不断扩展,数据不断增加,数据库的压力也会越来越大,对数据库或者SQL的基本优化可能达不到最终的效果,我们可以采用读写分离的策略来改变 现状.读写分离现在被大量应用于很多大型网站,这个技术也不足为奇了.ebay就做得非常好.ebay用的是oracle,听说是用Quest Share Plex 来实现主从复制数据.      读写分离简单的说是把对数据库读和写的操作分开对应不同的数据库服务器,这样能有效地减轻数据库压力,也能减轻io压力.主数据库提供写操作,从数据库提 供读操作,

PHP自定义安装

① 自定义安装(先要在管理里停止apache服务,再卸载apache,再安装时不需要重启电脑) apache+php+mysql+phpmyadmin自行安装 我们建议大家,安装的时候安装到同一文件夹,利用管理(文件夹不要中文) 安装完一个测试一个. 1. apache 完后 http://locahost 2. 下 php 核心包(用于支持php开发,类似java中的JDK ) VC6就是legacy Visual Studio 6compiler,就是使用这个编译器编译的. VC9就是the

php操作redies封装的类

null,// 只支持一台 Master 'slave'=>array(),// 可以有多台 Slave ); /** * 构造函数 * * @param boolean $isUseCluster 是否采用 M/S 方案 */ public function __construct($isUseCluster=false){ $this->_isUseCluster = $isUseCluster; } /** * 连接服务器,注意:这里使用长连接,提高效率,但不会自动关闭 * * @par

CI框架连接数据库配置操作以及多数据库操作

数据库快速入门例子代码 下面的内容将简单说明怎样使用数据库.更详细的信息请阅读各个函数的单独介绍页面.   初始化数据库类 下面的代码将依据你的数据库配置载入并初始化数据库类:   $this->load->database();   一旦被载入,你可以在任何地方像这样使用它:   注意: 如果你的所有页面均要求初始化数据库类,你可以让它自动加载.详见 数据库连接.   多结果标准查询(对象形式) $query = $this->db->query('SELECT name, ti

MYSQL服务维护及应用设计笔记

以下是使用MYSQL服务的一些经验,主要从以下几个方面考虑的MYSQL服务规划设计. 1 MYSQL服务的安装/配置的通用性:2 系统的升级和数据迁移方便性:3 备份和系统快速恢复: MYSQL服务器的规划为了以后维护,升级备份的方便和数据的安全性,最好将MYSQL程序文件和数据分别安装在"不同的硬件"上. / /usr <== 操作系统 }==> 硬盘1 /home/mysql <== mysql应用程序 ... /data/app_1/ <== 应用数据和脚

MySQL常见错误提示及解决方法

130 :文件格式不正确.(还不是很清楚错误的状况) 145 :文件无法打开. 1005:创建表失败. 1006:创建数据库失败. 1007:数据库已存在,创建数据库失败. 1008:数据库不存在,删除数据库失败. 1009:不能删除数据库文件导致删除数据库失败. 1010:不能删除数据目录导致删除数据库失败. 1011:删除数据库文件失败. 1012:不能读取系统表中的记录. 1016:文件无法打开,使用后台修复或者使用 phpmyadmin 进行修复. Quote: 开始=>所有程序=>附

开发大型高负载类网站应用的几个要点

看了一些人的所谓大型项目的方法,我感觉都是没有说到点子上,有点难受. 我也说说自己的看法.我个人认为,很难衡量所谓项目是否大型,即便很简单的应用在高负载和高增长情况下都是一个挑战.因此,按照我的想法,姑且说是高负载高并发或者高增长情况下,需要考虑的问题.这些问题,很多是和程序开发无关,而是和整个系统的架构密切相关的. 数据库  没错,首先是数据库,这是大多数应用所面临的首个SPOF.尤其是Web2.0的应用,数据库的响应是首先要解决的. 一般来说MySQL是最常用的,可能最初是一个mysql主机

Smarty实例教学 实例篇

Smarty实例教学 实例篇(三.使用ADODB连接数据库) 前两个月因为工作上的原因一直很忙,所以没有及时完成这个教程,正好今天周六不用加班,抽个空完成它吧! 在开始新的的教程的时候,我 先把以前的我写的那个教程中的一些错误的地方修改过来,在这里要感谢 nesta2001zhang兄弟,是他找出了文章中的一些错误,否则真的被别人 骂"误人子弟了"(说来真是惭愧,我的初稿发布后后就发现在一大堆的问题,后来一些时候发重新修改后的文件中居然也出现了错误,真是不应 该...)在上几篇教程中的

PHP ADOdb使用手册:ADOdb安装与Mysql连接教程

在PHP网站开发中,针对数据库平台移植性的解决方案,之前介绍过PEAR DB类安装使用的PHP教程,其实使用PHP ADOdb类库也是一种很好的解决方案,其支持的数据库引擎更多. 作为PHP ADOdb使用手册开篇文章,主要介绍使用PHP ADOdb类库具有哪些优点,PHP ADOdb类库的基本安装使用方法,以及使用PHP ADOdb建立Mysql数据库连接的几种方法. 使用PHP ADOdb的优点 1.与PHP结合好,速度快 2.扩展性好,对于windows平台的程序员来说易于掌握,因为和Mi