【问题标题】:Connection pooling vs persist connection mysqli连接池与持久连接 mysqli
【发布时间】:2014-07-23 05:35:20
【问题描述】:

我读过 mysqli 引入了 mysql 中不可用的连接池。 http://php.net/manual/en/mysqli.quickstart.connections.php

我已阅读 this question,它解释了连接池和持久连接之间的区别。

他们在mysqli documentation for Persistent connection 中写道:

如果给定主机组合的未使用持久连接, 找不到用户名、密码、套接字、端口和默认数据库 在连接池中,然后mysqli打开一个新连接。

那么,mysqli 是否将连接池用于持久连接?

如果是,那么mysqli中的连接池和持久连接有什么区别?

如果不是,那么mysqli如何为持久连接执行连接对象的查找?

【问题讨论】:

    标签: php mysql database mysqli mysqlconnection


    【解决方案1】:

    实际上术语连接池持久连接mysqli的情况下指的是同一个东西 在 PHP 中。

    持久连接在这种情况下是指从 PHP 脚本打开的 MySQL 连接,该连接在脚本完成执行后保持打开状态,以便在以后的某些执行中再次使用。

    连接池意味着有一个由 PHP 维护的持久连接池。来自这个池的一个空闲连接被提供给想要连接到 MySQL 的 PHP 脚本,并在脚本完成时返回到池。

    您可能想知道为什么我们需要 MySQL 连接池,为什么我们不对所有脚本只使用一个持久连接?

    这有两个原因:

    • PHP 根据使用的host/port/username/password 创建一个 MySQL 连接池。如果一个脚本想要使用一些host/port/username/password 组合连接到 MySQL,PHP 会搜索具有相同值的空闲持久连接。如果未找到,则使用此 host/port/username/password 组合创建新的持久连接。因此,我们至少需要与所有脚本使用的不同 host/port/username/password 值一样多的不同持久连接。
    • 您不能同时在一个 MySQL 连接上执行两个 SQL 命令。当两个 PHP 脚本同时执行时,就会发生这种情况。当两个脚本要同时与 MySQL 通信时,会创建两个持久的 MySQL 连接。池中的持久连接数等于最后执行的最大并行 PHP 脚本数,或等于在php.ini 中设置的上限。

    重要提示:

    MySQL 连接池(和任何其他连接池)只有在 PHP 作为 Web 服务器插件执行时才能存在。当 PHP 可执行文件在脚本执行后终止时,池在 fast-cgi 模式下或以任何其他方式工作时不起作用。

    编辑:如果 web 服务器配置为对多个请求重用一个 PHP fast-cgi 进程,则 MySQL 连接池可以用于 PHP 的 fast-cgi 模式。如果 PHP fast-cgi 进程配置为在服务一个请求后退出,那么它的所有 MySQL 连接都将关闭。

    【讨论】:

      【解决方案2】:

      libmysql18 中,它会查找任何现有的默认mysql sock/port 并使用凭据对其进行测试。如果找不到,则调用 c++ 函数clone(),创建新的连接对象(资源)。在某些情况下,这可能会导致堆栈溢出。我不熟悉它在mysqlnd(本机驱动程序)中的工作方式。也许别人是。如果您想了解有关它如何工作的更多信息,请安装一个版本的 facebooks HHVM-debug 包并尝试在多个嵌套函数中通过全局传递连接。这可能会在 HHVM 下触发堆栈溢出,这将显示在异常之前调用的每个函数。

      【讨论】:

      • 感谢您的重播。我正在寻找 mysqli 和 php 而不是 hack。
      • @Dhruv 是的,我知道。 php 使用两种不同的驱动程序连接到 mysql。一个是mysqlnd,另一个是libmysql。您使用的驱动程序取决于您的操作系统和安装。我回答了你关于它如何执行连接对象查找的问题。
      猜你喜欢
      • 1970-01-01
      • 2011-03-29
      • 2011-04-21
      • 2012-07-24
      • 1970-01-01
      • 2012-06-06
      • 1970-01-01
      • 2010-12-01
      • 2018-10-19
      相关资源
      最近更新 更多