【发布时间】:2018-11-16 13:22:51
【问题描述】:
我们有一个 Laravel 应用程序(版本 5.4.18),它连接到 MySQL(5.6.38)数据库(总共 30 万行),MyISAM 类型。
而且我们有像Model::with('anothermodel')->paginate(25)这样的api-response,在某个时候这个查询的执行时间已经达到了18秒,这是非常大的价值。我创建了一个带有实时 laravel 环境副本的沙箱,该环境使用完全相同的数据库(在同一台服务器上)的副本,现在这个 api-response 在 2.5 秒内执行。如果我们尝试将沙箱 laravel 连接到实时数据库,那么 api 执行又是 18 秒。请检查图像。
所以如果我们假设问题出在直播网站的数据库表中,但是如果我们尝试用microtime 测量这个查询,那么它将显示生成这个查询并从数据库中获取数据所需的时间是只需 0.7 秒。
因此,如果我们假设问题出在 API 路由或 Laravel 代码中,但如果我只是将其复制到子目录(作为沙箱)中,则完全相同的代码将毫无问题地执行。
有什么想法吗?
还有一些服务器信息:32gb RAM 的 Linux 服务器上的 PHP 7.0.29。
【问题讨论】:
-
您是否在实时和本地服务器上安装了 laravel 调试栏?这个查询在 laravel-debugbar 中的时间是多少?您的实时服务器似乎与查询无关。如果查询将是问题,那么您无法在沙盒环境中实现 2.5 秒。当您加载实时数据时,请注意浏览器控制台的网络选项卡并查看调试栏的输出
-
还取决于您的域(主机)或路由在实时服务器中的解析速度。我会说午餐新的实时环境并安装应用程序。但首先检查实时服务器的连接性。
-
是否使用
OFFSET进行分页?那很糟。 mysql.rjweb.org/doc.php/pagination -
我想知道这是否与导致延迟的数据库服务器上的负载有关
-
"那么它将显示生成此查询并从数据库中获取数据所需的时间仅为 0.7 秒" - 那么为什么不分析您的应用程序并找出它在做什么呢17 秒?我们无法为您做到这一点。
标签: mysql database laravel performance myisam