代码之家  ›  专栏  ›  技术社区  ›  rogeriopvl

mysql_connect vs mysql_pconnect[关闭]

  •  25
  • rogeriopvl  · 技术社区  · 16 年前

    我有这个疑问,我在网上搜索过,答案似乎多种多样。通过php连接到数据库时,使用mysql_-pconnect优于mysql_-connect吗?我读到pconnect的伸缩性更好,但另一方面,作为一个持久的连接…同时拥有10000个连接,都是持久的,对我来说似乎是不可扩展的。

    事先谢谢。

    5 回复  |  直到 9 年前
        1
  •  34
  •   Bill Karwin    11 年前

    MySQL不需要持久连接。在其他数据库(如Oracle)中,建立连接既昂贵又耗时,因此,如果您可以重新使用连接,那将是一个巨大的胜利。但是这些品牌的数据库提供连接池,这可以更好地解决这个问题。

    与其他品牌的数据库相比,连接到MySQL数据库的速度很快,因此使用持久连接对MySQL的好处要比其他品牌的数据库小得多。

    持久连接也有缺点。数据库服务器为每个连接分配资源,不管是否需要连接。因此,如果连接处于空闲状态,您会看到大量无用的资源。我不知道你是否能达到10000个空闲连接,但即使是几百个也是昂贵的。

    连接具有状态,对于一个PHP请求来说,从先前由另一个PHP请求使用的会话“继承”信息是不合适的。例如,临时表和用户变量通常在连接关闭时清除,但如果使用持久连接,则不会清除。同样,基于会话的设置,如字符集和排序规则。也, LAST_INSERT_ID() 会报告会话中最后生成的ID——即使是在先前的PHP请求中。

    至少对于MySQL来说,持久连接的缺点可能超过它们的好处。还有其他更好的技术来实现高可伸缩性。


    2014年3月更新:

    与其他品牌的RDBMS相比,MySQL的连接速度总是很低,但它正在变得更好。

    http://mysqlserverteam.com/improving-connectdisconnect-performance/

    在MySQL5.6中,我们开始优化代码处理连接和断开连接。这项工作在MySQL5.7中加速了。在这篇博文中,我将首先展示我们取得的成果,然后描述我们为获得这些成果所做的工作。

    阅读博客了解更多详细信息和速度比较。

        2
  •  4
  •   staticsan    16 年前

    基本上,您必须平衡创建连接与保持连接的成本。尽管MySQL在建立新连接方面速度非常快,但它仍然需要花费——线程设置时间和Web服务器的TCP/IP设置时间。在交通流量足够大的站点上,这一点很明显。不幸的是,PHP对连接的持久性没有任何控制。因此,答案是在MySQL中长时间降低空闲超时(比如减少到20秒),并增加线程缓存的大小。总之,这通常非常有效。

    另一方面,您的应用程序需要尊重连接的状态。最好不要假设会话处于什么状态。如果您使用临时表,那么使用create if not exists和truncate table有很大帮助,惟一地命名它们(例如包括userid)也有很大帮助。事务的问题更大一些;但是您的代码总是可以在顶部进行回滚,以防万一。

        3
  •  3
  •   Vinko Vrsalovic    16 年前

    您不太可能连接到10000个。无论如何,去 official source . (强调我的)。

    如果永久连接没有 任何附加功能,是什么 它们有好处吗?

    这里的答案非常简单-- 效率。持久连接是 很好,如果创建链接的开销 对您的SQL Server来说是高的。是否或 不是这个开销真的很高 取决于许多因素。喜欢什么 它是一种数据库,无论 不是在同一台电脑上 您的Web服务器所在位置,如何 已加载SQL Server所在的计算机 等等。 底线 如果连接开销是 高持久性连接帮助您 相当地 . 他们导致了孩子 仅连接一次的过程 在它的整个生命周期,而不是 每次它处理一个页面 需要连接到SQL Server。 这意味着对于每个孩子来说 打开永久连接将 有自己的开放持久性 连接到服务器。例如, 如果你有20个不同的孩子 运行脚本的进程 与SQL的持久连接 服务器,你有20个不同的 与SQL Server的连接,一个 来自每个孩子。

    不过,请注意,这可能有一些 使用数据库时的缺点 连接限制为 被持续的子级超过 连接。如果数据库有 限制16个同时连接, 在繁忙的服务器中 会话,17个子线程尝试 连接,一个将无法连接。如果 你的脚本中有错误 不允许关闭连接 向下(如无限循环) 只有16个连接的数据库可以 迅速被淹没。检查你的 信息数据库文档 处理废弃或闲置 连接。

        4
  •  3
  •   Kjuly    11 年前

    mysql_connect() mysql_pconnect() 两者都适用于数据库连接,但差别不大。在 mysql_-pconnect()。 , p 表示持续连接。

    当我们使用 MySQL连接() 函数,每次打开和关闭数据库连接时,取决于请求。

    但万一 mysql_-pconnect()。 功能:

    • 首先,在连接时,该函数将尝试查找已使用相同主机、用户名和密码打开的(持久)连接。如果找到一个,将返回其标识符,而不是打开一个新连接。

    • 第二,当脚本执行结束时,与SQL Server的连接将不会关闭。相反,连接将保持开放状态以供将来使用。( mysql_close() 不会关闭由建立的连接 mysql_-pconnect()。 )

    mysql_pconncet() 当你的网站上有很多流量时是有用的。此时,对于每个请求,它将不会打开连接,而是从池中获取连接。这将提高网站的效率。但一般使用mysql_connect()是最好的。

        5
  •  0
  •   Pritty M    9 年前

    MySQL连接()

    1.mysql_connect可用于关闭连接,每次打开和关闭数据库连接时,根据请求而定。

    2.在mysql connect中每次加载页面时都会打开数据库。

    3.加载页面时,每次都加载数据库

    4.用于关闭连接

    例子:

    <?php $conn = mysql_connect(‘host’, ‘mysql_user’, ‘mysql_password’); if(!$conn){ die(‘Could not connect: ‘ . mysql_error()); } echo ‘Connected successfully’; mysql_close($conn); ?>
    

    描述:

    主机:指定主机名或IP地址,如localhost。

    mysql_user:指定mysql用户名

    mysql_password:指定mysql密码

    mysql_-pconnect()。

    1.我们使用mysql_pconcet(),它最初试图找到一个开放的持久连接。

    2.mysql_pconcet()打开持久连接

    3.mysql_pconnect()不支持关闭连接

    4.mysql_pconnect()无法关闭连接。在这里打开到数据库的持久连接

    5.这里的数据库不需要每次都连接。

    6.在mysql_pconcet()中不需要每次都连接数据库。

    更多细节: http://prittytimes.com/difference-between-mysql_connect-and-mysql_pconnect/

    推荐文章