首页 文章

使用cron时MySQL的性能差异

提问于
浏览
7

我有一些使用cPanel在共享托管环境中运行的PHP维护脚本 . 大多数脚本需要每3-4小时运行一次,为了简化执行,我编写了一个调度程序脚本,用于检查需要运行哪些脚本(如果有的话)并在必要时执行它们 . 我将调度程序脚本设置为在cron中每5分钟运行一次 . 如果脚本发现当前没有维护任务,则不会执行任何操作 . 调用调度程序的开销导致执行大约5个短SQL查询(因此每5分钟执行一次) .

一切都工作正常,直到我的主人抱怨MySQL使用率很高,声称我远远超过允许的限制 . 禁用调度程序cron作业后,我的资源使用率降至0 .

  • Before disabling cron job: MySQL进程数(平均值) - 0.97

  • After disabling cron job: MySQL进程数(平均值) - 0.00

奇怪的是,在删除cron作业后,我仍然每隔几个小时通过浏览器手动激活调度程序脚本 . 由于脚本仍在运行,我对MySQL进程的平均数量大幅下降感到非常惊讶 . 在禁用cron作业之前,我开始记录调度程序和维护脚本执行了多少SQL查询 .

  • Before disabling cron job: 9899查询一天(平均)

  • After disabling cron job: 9552查询一天(平均)

因此,当我手动调用调度程序时,它仍然执行与cron一样多的SQL查询,但不知怎的,我的MySQL使用率仍然基本没有下降 .

使用php命令通过cron作业执行PHP脚本与通过浏览器调用它之间是否存在性能相关的差异?我没有在我的脚本中显式关闭数据库连接,因为我的理解是这在执行结束时自动发生 . 当脚本通过cron运行时,此连接是否可以保持打开状态?使用cron时可能存在哪些实质性性差异的解释?

1 回答

  • 3

    通常,两个 php.ini 文件与PHP一起安装:

    • 一个用于Apache

    • 一个用于CLI(命令行界面)

    通常,cron作业将执行 php -f yourfile.php ,它使用CLI php.ini 文件 . 同样,当您通过网络和apache调用脚本时,它将使用apache php.ini 文件 . 此外,apache允许在虚拟主机配置中使用 php_valuephp_flag.htaccess 文件 .

    You most probably have a configuration difference between apache and CLI.

    弹出我脑海中的第一件事就是持久的数据库连接 . 持久连接将使用与数据库服务器的连接池,这些连接将在请求之间保持不变,即保持打开状态,以避免TCP握手 . 这是性能优化,但可以超越MySQL服务器的连接限制 .

    在我的系统(Ubuntu)上,两个 php.ini 文件的路径如下:

    • /etc/php5/apache2/php.ini

    • /etc/php5/cli/php.ini

    您可以通过 -c 标志在命令行上运行 php 时指定要使用的 php.ini 文件 .

相关问题