suchen

Heim  >  Fragen und Antworten  >  Hauptteil

php脚本执行完就断开MySQL了吗?

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

PHP中文网PHP中文网2782 Tage vor894

Antworte allen(5)Ich werde antworten

  • PHP中文网

    PHP中文网2017-05-16 13:08:27

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

    Antwort
    0
  • 漂亮男人

    漂亮男人2017-05-16 13:08:27

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

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

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

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

    Antwort
    0
  • 大家讲道理

    大家讲道理2017-05-16 13:08:27

    单从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。。

    Antwort
    0
  • 天蓬老师

    天蓬老师2017-05-16 13:08:27

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

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

    Antwort
    0
  • 大家讲道理

    大家讲道理2017-05-16 13:08:27

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

    Antwort
    0
  • StornierenAntwort