我有许多 PHP 维护脚本在使用 cPanel 的共享主机环境上运行。大多数脚本需要每 3-4 小时运行一次,为了简化它们的执行,我编写了一个调度程序脚本来检查这些脚本中的哪些(如果有的话)需要运行并在必要时执行它们。我将调度程序脚本设置为在 cron 中每 5 分钟运行一次。如果脚本发现当前没有任何维护任务到期,它什么也不做。调用调度程序的开销导致执行大约 5 个短 SQL 查询(因此这些查询每 5 分钟执行一次)。
一切正常,直到我的主机抱怨 MySQL 使用率高,声称我远远超出了允许的限制。禁用调度程序 cron 作业后,我的资源使用量下降到 0。
- 在禁用 cron 作业之前: MySQL procs 数(平均) - 0.97
- 禁用 cron 作业后: MySQL procs 数(平均) - 0.00
奇怪的是,删除cron作业后,我仍然每隔几个小时通过浏览器手动激活调度程序脚本。由于脚本仍在运行,我对 MySQL 进程的平均数量大幅下降感到非常惊讶。在禁用 cron 作业之前,我开始记录调度程序和维护脚本执行了多少 SQL 查询。
- 禁用 cron 作业之前:每天 9899 次查询(平均)
- 禁用 cron 作业后:每天 9552 次查询(平均)
因此,当我手动调用调度程序时,它仍然执行几乎与 cron 一样多的 SQL 查询,但不知何故,我的 MySQL 使用率仍然下降到基本上没有。
使用 php 命令通过 cron 作业执行 PHP 脚本与通过浏览器调用它之间是否存在与性能相关的差异?我没有在我的脚本中明确关闭数据库连接,因为我的理解是这会在执行结束时自动发生。当脚本通过 cron 运行时,此连接是否可能保持打开状态?使用 cron 时性能的显着差异还有哪些其他解释?