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

$new_link是否应该在mysql_connect()中使用?

  •  2
  • Eddie  · 技术社区  · 16 年前

    我正在维护一个基于drupal的继承站点。我们目前正在经历“太多的连接”到数据库。

    在/includes/database.mysql.inc文件中, @mysql_connect($url['host'], $url['user'], $url['pass'], TRUE, 2) ( mysql_connect() documentation )用于连接到数据库。

    应该 $new_link = TRUE 使用吗?我的理解是它会“总是打开一个新的链接”,这会导致“连接太多”吗?

    5 回复  |  直到 16 年前
        1
  •  1
  •   Peter Carrero    16 年前

    Drupal运行了几个高性能站点,没有问题。例如,格莱美颁奖典礼的网站今年换成了Drupal,这是第一次在Cerimony期间网站没有关闭!某些配置需要在您的设置上进行调整。可能是MySQL。

    编辑my.cfg并重新启动mysql服务器(fedora、rh、centos中的/etc/my.cfg和*buntu中的/etc/mysql/my.cfg)

    [ myqLDL] max_connections=此处的某个数字

    或者,要先尝试更改而不重新启动服务器,请登录mysql并尝试:

    显示像“max_connections”这样的变量 在此处设置全局最大连接数

    哦,就像另一个人说的:做。不是。编辑。德鲁帕尔核心。如果你想让你的网站保持更新,可能会引起顽固的头痛,给你带来一个痛苦的世界。

        2
  •  2
  •   Kevin    16 年前

    编辑核心是一个编号。你会忘记你做了,升级版本,然后bam,更改就消失了。

        3
  •  1
  •   Louis-Philippe Huberdeau    16 年前

    mysql,就像任何rdbms一样,它会限制它在任何时候接受的连接数量。my.cnf配置文件为“最大连接数”配置下的服务器指定此值。您可以更改此配置,但根据服务器的容量有实际的限制。

    持久连接可能有助于减少连接到数据库所需的时间,但对mysql将接受的连接总数没有影响。

    连接到mysql并使用“show processlist”。它将向您显示当前打开的连接及其功能。您可能有多个连接处于空闲状态或运行查询的时间太长。对于空闲连接,可能只需要确保代码不会在连接不需要时保持连接打开。对于第二个问题,它们可能是代码中需要优化的部分,这样查询就不会花费太长时间。

    如果所有连接都是合法的,那么您的负载比当前配置允许的负载要多。如果即使使用当前连接数,mysql负载也很低,那么可以稍微增加一点,看看它是如何发展的。

    如果您不在专用服务器上,则可能无法对此做太多操作。可能是别人的代码引起了麻烦。

    有时候,这些失败只是暂时的。当它失败时,您可以在几毫秒后重试连接。如果仍然失败,那可能是个问题,停止脚本是正确的做法。不要把它放在无限的循环中(以前见过,可怕的想法)。

        4
  •  1
  •   chx    16 年前

    仅供参考:使用与drupal的永久连接是自找麻烦。据我所知没有人会用这个。

        5
  •  0
  •   K. Norbert    16 年前

    这个 new_link 参数只有在多次调用 mysql_connect() , 在1个请求期间 ,这里可能不是这样。

    我怀疑这是由于访问你的网站的用户太多,同时,因为对于每个访问者,将建立一个新的数据库连接。

    如果你能证实这是真的, mysql_pconnect() 可以 帮助,因为问题不在于数据库服务器上的压力,而在于连接的数量。你也应该读 Persistent database connections 看看它是否适用于您的web服务器设置,如果您选择走这条路。

    推荐文章