【问题标题】:PHP in combination with MySQL is extremely slowPHP 与 MySQL 结合使用速度极慢
【发布时间】:2011-12-09 19:52:10
【问题描述】:

我目前的一台服务器运行缓慢。它使用 PHP 和 MySQL 运行 apache2 服务器。 MySQL 服务器与网络服务器本身托管在同一台机器上。

每当我请求一个包含 MySQL 查询的 PHP 文件时,页面大约需要 24 秒才能显示出来。在请求页面时,apache2 的 CPU 使用率上升了 11% (!),这与一周前相比已经有了很大的提升。

非 PHP 文件或没有 MySQL 查询的 PHP 文件会立即显示。

什么可能导致包含 MySQL 查询的脚本出现问题? 我无法在 apache 错误日志中找到任何有用的信息。

【问题讨论】:

  • 您可以访问 MySQL 日志吗?
  • 我可以访问整个服务器。不幸的是,我不确定在 Debian 下日志保存在哪里。目录 /var/log/mysql 是空的,因此我假设它将它们存储在其他地方。并且文件 /var/log/mysql.err 和 mysql.log 是空的。
  • 查询大小会影响响应时间吗?也就是说,如果你写一个不接触任何表格的简单标识,是否仍然需要半分钟才能响应?
  • 我尝试手动执行几个 MySQL 查询,当我通过终端登录 MySQL 服务器时,它们的响应非常快。但是,当我通过 PHP 脚本执行它们时它们非常慢,需要很长时间才能响应。
  • 只用 db 连接代码和单个查询创建一个隔离的 PHP 页面并运行它,然后在终端中运行相同的查询,看看速度是否有任何差异......

标签: php mysql apache2


【解决方案1】:

在 mysql 控制台中

show full processlist;  <-- to show what are the current SQL

检查日志文件在哪里:-

show variables like '%log%'; <-- to show mysql variables

在进行查询基准/测试时,请务必关闭查询缓存,使用:-

set session query_cache_type=off;

【讨论】:

  • 感谢您的回答。显示完整的 processlist 返回两行 - 显然 processlist 查询本身和来自我的站点的查询:| 59 |根 |本地主机 | db1 |睡眠 | 20 | |空 |时间:20 似乎相当高。
  • sleep is sleep zzzzZZZZ ...您应该打开一些慢速页面,并同时显示完整的进程列表以进行比较。
  • 好吧,但是在这个睡眠条目消失后,页面似乎终于加载了。我使用 wordpress 博客中较慢的页面对其进行了测试。
  • 您的站点是否连接到任何外部资源?比如你的wordpress是托管在另一个网络上的吗?睡眠状态是mysql连接打开,但是处于空闲状态,等待下一次查询。
  • wordpress 博客也托管在同一台服务器上。
【解决方案2】:

数据库查询需要时间来运行,每个查询都涉及打开至少一个文件。文件访问很慢。

您可以通过在 RAM 中而不是在硬盘驱动器中运行数据库来加速请求,但真正的答案可能是尽可能多地缓存,这样您就可以尽可能少地进行数据库查询。

【讨论】:

  • 感谢您的回答,但该网站过去运行得非常快,就像一周前一样。突然之间它很慢,所以我假设触发了某种超时?不过我缺乏背景知识。
【解决方案3】:

您可以检查 mysql 数据库是否由于某些 cms 日志记录功能而大于 2GB(或 4GB)并超过文件大小限制。

【讨论】:

  • 我搜索了一个查询以获取数据库大小,它似乎只有大约 2.1 MB 小。
猜你喜欢
  • 2015-07-22
  • 2013-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-07
  • 2011-03-30
  • 1970-01-01
相关资源
最近更新 更多