Laravel migrations/db:seed super slow

2022-08-30 19:20:32

我最近从旧的Windows计算机升级到第4代I7 Ubuntu 15.04

像梦一样奔跑,嗯...除了任何涉及数据库的Laravel工匠命令都需要一百万年才能完成,而我的旧计算机在几秒钟内执行了这些命令中的任何一个。

主要区别在于,我没有使用XAMPP,而是将MySQL作为本地服务运行。

同样在我的旧计算机中,我可以看到迁移如何缓慢地显示在屏幕上,因为它们似乎正在处理,而现在,它需要2〜5分钟,完成后,整个迁移列表立即显示。这可能表明某个地方有瓶颈。

在互联网上的某个地方,有人说由于DSN分辨率而使用“127.0.0.1”而不是“本地主机”。没有解决它。

确保这不是我运行的问题

    $time = microtime(true);

    //also with host=127.0.0.1
    new PDO("mysql:host=localhost;dbname=some_db", "username", "password");

    //some simple queries here...

    //yielded similar marginal times
    echo microtime(true) - $time;

~哈普


编辑

我从框架中收集了每个查询的运行时间,我有很多迁移,分析我发现没有什么特别慢的数据(比如查询运行一分钟)。

这是一个数据链接。实际的查询被省略了,有利于我的雇主。

尽管有许多查询运行了一秒钟或更长时间,但最慢的查询需要3.5秒。number 221

我有大约一百次迁移(我知道),但事情就是这样,如果每次迁移都需要一秒钟,我会等待大约一分半钟才能迁移,但通常需要4到5分钟。

正如oliverpool所建议的那样,我通过终端在mysql上重放查询来做一些分析,但我从来不需要等待超过一秒钟,平均查询大约需要一秒钟。

这是最慢查询的分析图片(迁移中为3.5秒,图片中不接近一秒)

enter image description here

也许这指向连接?顺便说一句,运行迁移后,慢查询日志为空

另外,我现在正在使用laravel 5,行为是一样的。我不知道如何解决问题连接,所以我想一些谷歌搜索是有序的,任何建议都是受欢迎的。

提前致谢


答案 1

在这种情况下,我认为缓冲池大小增量是必需的。设置以下内容:

[mysqld]
innodb_io_capacity = 2000
innodb_read_io_threads = 64
innodb_thread_concurrency = 0
innodb_write_io_threads = 64

答案 2

如果您使用的是 MySQL 8

在我的情况下,问题是MySQL 8速度较慢,这是在将MySQL 5.7更新到8之后发生的insert

5.7和8.0之间的区别在于,在MySQL 8.0中,默认情况下,二进制日志记录(用于复制和PITR)处于打开状态。在 8.0 中运行而不进行二进制日志记录

此问题的快速解决方法是使用以下命令启动MySQL服务器--disable-log-bin

或者您可以在my.cnf中编写以下代码

[mysqld]
skip-log-bin

欲了解更多信息,请访问

https://dba.stackexchange.com/questions/216352/inserts-in-mysql-8-are-slower-than-inserts-in-mysql-5-7?newreg=fe2b7682e8314f07a785ddc9a8ffbdce

https://dba.stackexchange.com/questions/227742/extreme-performance-loss-due-to-moving-from-mysql-5-7-23-to-mysql-8-0-status-c


推荐