【问题标题】:Application times out in browser but not in command line应用程序在浏览器中超时但不在命令行中
【发布时间】:2012-12-15 23:41:00
【问题描述】:

我正在使用 CodeIgniter 和 MySQL 构建一个 Web 应用程序。我对此感到困惑:

我有一个 MySQL 视图,它汇集了 3 个表,其中一个表有大约 600,000 行数据。根据这个观点,我提出以下查询:

SELECT *, AVG(value_avg) hourly_value_avg, AVG(count) hourly_count_avg, (AVG(value_avg) * AVG(count)) hourly_time_consumed FROM (`perf_view`) GROUP BY `event_id`

通过 MySQL 客户端大约需要 5 秒才能得出 30 个结果,通过命令行,调用执行查询的确切控制器和方法,时间大致相同,问题是,当我点击页面时在浏览器中,我收到以下错误:

Error Number: 2013
Lost connection to MySQL server during query

阅读此错误后,我发现它可能是客户端错误,即 PHP 超时,而不是数据库。有点困惑,有没有人遇到过同样的问题?

如果能得到任何帮助,我将不胜感激:)

【问题讨论】:

  • 通过谷歌搜索错误消息开始您的调试工作。您会经常看到许多其他人遇到过它。
  • 将查询更改为非常简单的查询,该查询将超级快速地返回一条记录,看看是否可以验证连接是否良好并开始寻找其他地方。
  • @palako 我做到了,它工作正常,当数据集较小时这工作正常。
  • @rambocoder 我已经尝试调试这个 3 天了,就像我遇到的任何问题一样,我从谷歌搜索开始。我来这里是因为我没有发现任何有用的东西。谢谢。
  • 那么如果查询大约需要5秒,那么需要多长时间才能得到错误呢?还不止这些吗?检查 php.ini 文件中的 mysql.connect_timeout 是否设置为 5 秒或更短。

标签: php mysql codeigniter shell


【解决方案1】:

在您的控制器构造函数或任何函数中,您可以尝试通过 codeigniters 框架扩展脚本使用的时间和内存。可以使用以下命令设置这些内容。

set_time_limit(0);     // set the execution time to any time. in my case infinite time
ini_set('memory_limit', '256M');      // set the memory use to whatever here 256 megs

您的情况听起来可能是内存问题。 600,000 条记录很容易超出 PHP 配置或 codeigniter 配置中的内存限制。两者通常都设置得很低,如果您的 600,000 条记录查询返回包含许多列的表的相当大块,我可以看到值得检查的内存限制问题。祝你好运。

【讨论】:

    猜你喜欢
    • 2019-10-10
    • 2014-06-05
    • 1970-01-01
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 2018-03-29
    • 2013-12-01
    • 2010-10-12
    相关资源
    最近更新 更多