由于查询速度极慢而导致应用程序无法使用

时间:2016-03-09 18:05:18

标签: php laravel pdo

我在Laravel上面临数据库查询的奇怪问题。

我使用get参数在查询构建器中实现了动态查询。

我注意到某些查询非常慢,所以我开始使用DB :: select($ sql)从查询构建器调试生成的sql并使用原始sql语句执行查询。

我做了一些研究,并且我知道n + 1问题,但事实并非如此,因为对于调试我只使用了DB :: select($ sql)的控制器动作,并没有向我显示任何结果。它显示了我:

  

代理错误

     

代理服务器收到来自上游服务器的无效响应。   代理服务器无法处理请求GET / controller / action。

     

原因:从远程服务器读取错误

相同的查询,使用不需要大量数据库处理的参数,使用此方法运行良好...

当我在MySQL Workbench上运行有问题的查询时,他们需要5到10秒才能显示结果。

在我的调试中,我在动作中手动创建了一个PDO对象并执行了查询。令我惊讶的是,运行与Workbench相同的时间。我在查询结果上使用了hydrate方法,并且在视图上成功渲染了对象。

接下来,我尝试使用Laravel的PDO对象执行查询,并使用DB :: getPdo()获取它。查询未得到处理,再次导致代理错误......

问题是通过自定义PDO对象解决的,但我不喜欢创建PDO对象的想法,而不是使用Laravel对象。

我不明白为什么会这样。它可以与数据库配置或Laravel的PDO对象相关吗?任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

有时,这类问题与速度慢或构建错误的查询并不完全相关,但MySQL设置未得到妥善管理。

MySql默认设置是通用的。那里有很多可以调整和罚款调整,以提高性能。查询缓存,缓冲区,内存使用等等。可以做很多事情。

查看此文章:http://www.tecmint.com/mysql-mariadb-performance-tuning-and-optimization/

还有用于此目的的特定工具。有些人有很好的GUI,但我最喜欢的是基于命令行,比如MyTop和MySQLTunner https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl