mysql与mysqli的连接区别

mysql与mysqli的连接区别

mysqli  连接是永久连接:一直都只使用同一个进程(可以减轻服务器端的压力)

mysql   连接是非永久连接:每次连接使用都是重新打开一个新的进程


mysql_connect每次都是重新通过tcp等跟sql服务器建立关系, 每次连接都是要消耗不少服务器资源的.

mysql_pconnect打开的连接不会关闭(即使调用mysql_close也不会关闭,因为对其无效),MySQL_pconnect是用来在php与MySQL间建立一条持续连接,使用pconnect时,有请求连接MySQL时, php会检查是否之前有条相同的连接(以相同的用户名密码连接到同一个MySQL服务器)已经建立,如果有的话就直接使用这条连接.

注意: 这个相同的连接的概念是对进程来说的,不同的进程连接 mysql_pconnect建立会建立起多条连接.

一般php有俩种运行模式, 一是作为cgi运行, 二是作为apache的模块运行.

作为cgi的时候connect跟pconnect没什么不同, 因为每次cgi进行运行结束后都会被销毁清理掉资源.
(cgi安装方式,pconnection永远也不会生效)

作为apache模块方式运行时, 可以使用到数据库持续连接, 但可能会存在潜在的问题:
如果一个用户锁死,当前进程就永久锁死了,而万一在apache里的设置是进程永不销毁的话,除非重启了,否则进程会被一直无效占用.

长连接问题:
也会出现mysql被配置最大支持10个并发,而apache被配置为使用100个子进程.apache由一个父进程来协调将收到的http request分发给哪个空闲中的子进程处理,这样很快处理了10个http请求,假设10个都分配给了不同的子进程,那么10条跟mysql间的持久连接就建立了, mysql的能力已经到了极限.而这时又来了一个http请求, apache将它分给其他的任意不在这10个子进程中的进程, 那么这个进程就没有办法建立到mysql的连接,因为已经满了.

你可能感兴趣的:(mysql)