【问题标题】:Laravel artisan command stops after some timeLaravel artisan 命令在一段时间后停止
【发布时间】:2016-12-20 21:30:14
【问题描述】:

我正在使用 laravel 5.1 并想更新具有近 20 万行的 mysql 表。它更新了近 25000 行,之后不再更新。更新这个需要将近 1 个半小时。

有什么建议吗?

【问题讨论】:

    标签: php apache laravel laravel-artisan


    【解决方案1】:

    您首先要检查的东西很少。

    • 您在 php 错误日志中遇到哪些错误(超时错误、内存不足错误等...)
    • 您在 mysql 错误日志中遇到哪些错误
    • 你的内核是否杀死了长时间运行的进程(例如extreme resource starvation

    例如,如果脚本在同一位置停止一致更新,则可能是您的 SQL 在该特定语句处出现错误。因此,请确保您正在检查 mysql 返回给 PHP 的任何错误(请参阅处理 PDOMySQLi 中的错误的手册)。

    如果您通过 PHP 运行 200,000 个不同的 SQL 查询,一次一个,它肯定会很慢,因为您将在每个查询中遇到 SQL 解析器、查询执行和结果获取步骤。有一些更快的替代方案,例如LOAD DATA INFILE,它绕过 MySQL 中的整个解析器和查询执行步骤,允许您直接从 CSV 写入数据库对象文件。这对于一次性将大量数据加载到数据库中非常有用。

    【讨论】:

    • 最初它每秒更新 6-7 行,速度不断降低,几乎为零。
    【解决方案2】:

    你检查你的错误日志。我想,你说 25000 raw 更新得很好,然后停止。更新时可能会导致一些数据库行传递错误。如果您可以逐个检查更新表,则可以验证它。

    例如:首先更新 1-2000 ,然后更新 2000-40000 。当更新 20000-250000 范围时仅通过错误,这意味着您的程序正常并且 db 条目通过错误。但是块明智,当增加负载时。它可以帮助您测试您的程序可以处理负载。这是某种测试方法。

    你的程序可能很慢,因为有大量的数据集合,这也取决于你的计算机或服务器或开发环境的性能。尝试重构或优化代码以提高性能。您还可以尝试非关系数据库(mongodb)一段时间,这可能会给您处理大量数据的好时机。我想这可能会帮助你解决你的问题。

    【讨论】:

    • 最初它每秒更新 6-7 行,速度不断降低,几乎为零。
    猜你喜欢
    • 2021-12-30
    • 2021-09-08
    • 2019-04-20
    • 2019-04-04
    • 2016-03-13
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多