使用cron时MySQL的性能差异

Hyb*_*tem 7 php mysql cron cpanel

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

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

  • 在禁用cron job之前: 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时可能存在哪些实质性性差异的解释?

thw*_*hwd 3

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

  • 一个用于阿帕奇
  • 一种用于 CLI(命令行界面)

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

您很可能在 apache 和 CLI 之间存在配置差异。

我首先想到的是持久数据库连接。持久连接将使用与数据库服务器的连接池,该连接池将持续存在,即保持打开状态,以避免 TCP 握手。这是一种性能优化,但可能会超出 MySQL 服务器的连接限制。

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

  • /etc/php5/apache2/php.ini
  • /etc/php5/cli/php.ini

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