繁体   English   中英

查询速度极慢,导致应用无法使用

[英]Unusable app due to extremely slow queries

我在Laravel上遇到数据库查询的奇怪问题。

我已经使用get参数通过查询生成器实现了动态查询。

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

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

代理错误

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

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

使用这种方法,相同的查询具有不需要大量数据库处理的参数,可以很好地运行...

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

进一步进行调试时,我在操作中手动创建了一个PDO对象并执行了查询。 令我惊讶的是,它花了与Workbench相同的时间来运行。 我在查询结果上使用了水合物方法,并且在视图上成功呈现了对象。

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

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

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

有时,这类问题与缓慢或构建错误的查询并不完全相关,但是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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM