致命错误:第462行\ doctrine \ lib \ Doctrine \ Collection.php中超出60秒的最长执行时间

时间:2010-01-27 16:35:20

标签: mysql doctrine

这是什么? 我的疑问是:

    Doctrine_Query::create()
                ->select('rec.*')
                ->from('Records rec')                   
                ->execute();

记录表包含超过20k行。

在页面上执行查询时出现错误:

     Fatal error: Maximum execution time of 60 seconds exceeded in \doctrine\lib\Doctrine\Collection.php on line 462

修改 但要从记录超过20k的表中检索值超过60秒。为什么?我正在使用相同的表来检索带有where子句的其他记录,它运行得很完美..

表格结构:

 CREATE TABLE IF NOT EXISTS `records` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `state` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `city` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `school` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=16334 ;

数据库是本地的。

我们可以做一件事,我们可以选择一个元素。喜欢:城市...... 我试过,即便如此,它给出了同样的错误..

行数为16333(确切),列数为4,如表结构中所述。

有谁能告诉我如何解决它? 意味着它为什么不工作.. mysql简单选择查询工作正常..

EDIT ----

任何人都可以解释为什么他/她投票我的问题为“否定”

3 个答案:

答案 0 :(得分:3)

Doctrine_Query::create()
            ->select('rec.*')
            ->from('Records rec')                   
            ->limit(5000)
            ->execute();

尝试这个..它会工作正常,但增加限制然后你将面临问题。修复这么多记录将导致问题..改变你正在使用的逻辑。索引等可以解决你的问题,但我没有任何关于那个的想法......可能有些人可以帮助你。

答案 1 :(得分:1)

向数据库添加where子句时,可能会导致它使用索引,从而使数据库引擎更容易。在一个数据库查询中一次性获取整个表通常是个坏主意,尽管这可能适用于较小的表。如果您一次抓住整个表格,它暗示您滥用数据库,可能将其视为一个美化的文件系统。一般来说,趋势应该只是抓住你需要的东西,并在可能的情况下抓住数据库端的全局操作和更新。

所有这一切,20000记录的60s看起来真的很慢。您可能需要检查您的数据库是否配置正确(例如,使用足够的RAM等等)。您可能会在http://mysqltuner.pl处找到mysqltuner perl脚本。

答案 2 :(得分:1)

在服务器安装的文件php.ini中,您将找到配置选项max_execution_time = 60。

尝试设置max_execution_time = 240甚至更高。

编辑php.ini后不要忘记重新启动网络服务器,以便读取文件。