首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >一个数据库的查询速度很慢,但他的副本查询速度很快

一个数据库的查询速度很慢,但他的副本查询速度很快
EN

Stack Overflow用户
提问于 2018-06-07 02:45:37
回答 3查看 619关注 0票数 9

我们有一个Laravel应用程序(版本5.4.18),它连接到MyISAM类型的MySQL (5.6.38)数据库(总共300k行)。我们有像Model::with('anothermodel')->paginate(25)这样的api-response,在某个时刻,这个查询的执行时间已经达到了18秒,这是一个非常大的值。我用活动laravel环境的副本创建了一个沙箱,该环境使用完全相同的数据库(在同一服务器上)的副本,现在这个api-response在2.5秒内执行。如果我们尝试将沙箱laravel连接到实时数据库,则api执行时间再次缩短为18秒。请检查图像。

因此,如果我们假设问题出在实时网站的DB表中,但如果我们尝试使用microtime测量此查询,那么将显示生成此查询并从数据库中获取数据所需的时间仅为0.7秒。

因此,如果我们假设问题出在API路由或Laravel代码中,但如果我只是将其复制到子目录中(作为沙箱),则完全相同的代码会被执行而没有任何问题。

有什么想法吗?

还有一些服务器信息: Linux服务器上的PHP 7.0.29,内存为32 at。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-13 17:43:55

我有3个解决方案给你:

1)使用以下命令检查、优化和修复该表:

mysqlcheck -u root -p --auto-repair --check --optimize --all-databases

2)如果问题没有解决,请使用Newrelic等监控应用检查您的查询执行计划

3)有时它不是关于特定的表它是关于数据库损坏,试着删除并用旧数据创建一个新的表。How to recover/recreate mysql's default 'mysql' database

票数 2
EN

Stack Overflow用户

发布于 2018-06-12 21:15:40

可能会有几个问题,一个是重建索引,这个问题已经解决并在此之前进行了备份,

另一个是你正在运行的服务器,我指的是Apache或NGINX。

查看为apache运行的内容

ps auxf

通过打开server-status监视apache

apachectl fullstatus

A good read here on Apache performance

票数 1
EN

Stack Overflow用户

发布于 2018-06-16 19:40:42

没有足够的信息来给出详细的诊断。就我个人而言,当查询执行缓慢时,我会开始检查服务器上的内存和cpu占用情况,htop是一个很好的工具,以防您无法访问任何其他用于服务器监控的许可软件,以确保不仅机器相同,而且工作负载也是相等的。很多时候,这类问题取决于资源的锁定或争用,而不是特定的查询。最终分离一个sql序列,并在两台服务器上获得解释。此时,您应该能够通过使用相同的客户端(即SQLYOG )来重现该问题,并能够在重新构建索引或表之后评估对解释和性能的更改。仅仅这样做并希望它会好起来并不是真正有用的,如果其目的是解决问题并生成关于如何在未来再次修复它的文档。是的,当仔细的数据库维护程序不到位时,由于需要重建的索引而导致的性能下降通常会一次又一次地发生。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50727483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档