【问题标题】:PHP and Multiple MySQL ConnectionsPHP 和多个 MySQL 连接
【发布时间】:2013-08-18 10:50:53
【问题描述】:

我有一个用 PHP 编写的 webapp,它目前在每个页面上创建一个数据库连接(使用 mysqli_connect)以从数据库中提取数据。

最近,我的网站速度变慢了(流量增加了一些),我想知道创建如此多的连接(任何页面上的每个用户一个连接)是否会导致速度变慢?

有什么解决办法吗?

是否可以为服务器创建一个可共享的连接?我知道这在 python 中是可能的,但我不知道如何在 PHP 中实现这样的模型。

注意:我的网站在 BlueHost 上...我不知道这是否也会产生影响。

【问题讨论】:

  • 为什么认为数据库连接会拖慢您的网站速度?
  • 对于任何“不是那么大”的流量,这根本不会减慢您的服务器的速度。您是否查看查询他们花费了多少时间?
  • 我知道在 Python 中连接到数据库的开销很大,而且最近我的网站速度变慢了 - 有时服务器需要 20 秒才能加载。查询最多需要 0.5 秒。
  • 如果您的查询正常,则很可能是负载平衡问题。这就是服务器需要很长时间才能响应的原因。
  • @Nicky93 我认为“执行查询时总是会遇到您的编码风格”。这不是一个好习惯。您应该避免每次都访问数据库。这是性能问题的事实之一。

标签: php mysql database-connection scalability


【解决方案1】:

您可以通过以下链接了解持久连接:

http://us2.php.net/manual/en/features.persistent-connections.php

http://php.net/manual/en/mysqli.persistconns.php

http://us2.php.net/manual/en/function.mysql-pconnect.php

但我强烈建议不要使用持久连接。

您需要找出实际上是什么导致您的网站变慢。

Ping 一个为您快速加载的网站。例如。 google.com.
ping 您的网络服务器,如果 ping 差异很大,那么您应该要求 BlueHost 解决它。

检查您的 Web 服务器和数据库服务器之间是否有任何延迟。他们可能是:

  • 在同一台机器上(几乎没有延迟)
  • 在同一本地网络中的不同机器上(除非有 LAN 问题,否则大多数情况下没有延迟,请询问 BlueHost)
  • 在不同网络中的不同机器上(可能存在问题,询问 BlueHost 是否可以在同一本地网络中转移数据库服务器)

如果上述一切都很好,并且页面仍然加载缓慢。

您可以在页面中的数据库工作完成后尝试显式调用 mysqli_close()。这将立即释放您的连接,而不是等待页面完全执行。然后,您需要找出在数据库工作结束后导致页面变慢的原因。

您可以在慢速页面上使用 mictotime() 来查看是什么代码减慢了速度。 您可以使用此链接:Accurate way to measure execution times of php scripts

【讨论】:

    【解决方案2】:

    在将主机传递给mysqli_connect 时,您可以在主机前添加“p:”以打开持久连接。

    【讨论】:

      【解决方案3】:

      有两件事要做。

      1. 在 MySQL 中设置慢查询日志,看看是否有查询 很慢。使用EXPLAIN 命令优化这些慢查询 识别缺失的索引等。
      2. 设置连接池以消除打开连接的所有问题 时间。有关详细信息,请参阅此链接 Connection Pooling In PHP

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-18
        • 2014-08-13
        • 2012-10-07
        • 2012-02-22
        • 2014-12-20
        • 2020-04-15
        • 2011-03-04
        • 1970-01-01
        相关资源
        最近更新 更多