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的连线是很慢的,能够一次抓取完所需的资料,就不要分两次。