php脚本执行完就断开MySQL了吗?
PHP中文网
PHP中文网 2017-05-16 13:06:27
0
5
879

一个脚本里面有连接mysql的sql语句,执行的时候mysql服务器是新开一个线程(还是进程?)是处理这个连接,脚本结束后就断开与PHP(还是apache?)的连接了吗。那些什么mysql长连接又是回事呢?突然觉得啥都不懂了。。。

PHP中文网
PHP中文网

认证高级PHP讲师

Antworte allen(5)
Ty80

要手动关闭 框架的话类里面的析构函数写上关闭的代码 一般都封装好了 不操心 一般都是单例模式连接mysql

漂亮男人

1.mysql开启进程处理相应事务

2.断开与apache httpd进程的连接,php以apache mod方式运行,apache接受到请求,将请求转发给mod,mod调取php
sapi执行,整个过程php以apache模块方式执行,在httpd进程中

3.短链接的缺点:创建一个连接,程序执行完毕后,就会自动断掉与mysql的链接。于是多少次php执行,就会多少次这样的创建和释放过程。频繁地创建和释放连接,比较耗费cpu资源。

 长连接就可以避免每次请求都创建连接的开销,节省了时间和IO消耗。
 
 mysql发现一个链接长时间没有执行查询请求,就会自动断掉这个连接
大家讲道理

单从php来说不可以维持长连接,但是有方法实现的。

如果是Apache+php_module模式去跑php,通过mysql_pconnect就可以建立永久链接,不过这个链接是由Apache去维持的(mysql_pconnect在nginx+fpm下不能维持长连接的,官方文档有说明)

nginx+fpm fpm一般设置为static,通过PDO扩展,连接数据库时可设置长连接,由每个fpm维持一个永久链接。不过还是要根据系统去评估一下fpm进程数和数据库最大连接数,php请求过少的话,大量连接闲置状态浪费资源(需合理配置mysql wait_time),php请求过多,fpm进程数过多导致超过数据库最大连接数就会造成too many connections。。

Peter_Zhu

一般php每次执行sql都会建立一个短链接,当执行完毕后由php断开链接(也许超时那么将有MySQL来断开链接)

现在有种通用的减少这种IO开销的方式是建立数据库连接池,维护指定数量的连接,用的时候直接获取相关资源就可以。

大家讲道理

原声php的话 需要自己手动关闭。 框架的话 一般都封装好了 直接用 就行

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage