0

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

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

有什么解决办法吗?

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

注意:我的网站在 BlueHost 上...我不知道这是否也会有所作为。

4

3 回答 3

0

有两件事要做。

  1. 在 MySQL 中设置慢查询日志,看看是否有慢查询。通过使用EXPLAIN命令来识别丢失的索引等来优化这些慢查询。
  2. 设置连接池以消除始终打开连接。有关更多信息,请参阅此链接PHP 中的连接池。
于 2013-08-16T06:28:02.013 回答
0

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

于 2013-08-16T06:28:44.507 回答
0

您可以从以下链接阅读有关持久连接的信息:

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

于 2013-08-16T07:06:23.870 回答