首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用cron时MySQL性能的差异

使用cron时MySQL性能的差异
EN

Stack Overflow用户
提问于 2013-01-15 07:51:09
回答 1查看 1.5K关注 0票数 7

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

一切都很好,直到我的主机抱怨MySQL使用率很高,声称我已经超出了允许的范围。禁用调度程序cron作业后,我的资源使用量下降到0。

  • 禁用cron作业之前的:MySQL进程的数(平均)- 0.97
  • 禁用cron作业后的:MySQL进程的数(平均)- 0.00

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

  • 禁用cron作业之前的 9899每天查询(平均)
  • 禁用cron作业后的 9552每天查询(平均)

因此,当我手动调用调度程序时,它执行的SQL查询仍然与cron一样多,但不知怎么的,我的MySQL使用量仍然下降到了零。

与通过浏览器调用PHP脚本相比,使用php命令通过cron作业执行php脚本在性能上有什么不同吗?我没有显式地关闭脚本中的数据库连接,因为我的理解是,在执行结束时会自动关闭数据库连接。当脚本通过cron运行时,这个连接是否可能保持打开?在使用cron时,还能有什么其他解释来解释巨大的性能差异呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-15 19:45:59

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

  • 一个给阿帕奇
  • 一个用于CLI (命令行接口)

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

您很可能在apache和CLI.之间有一个配置差异。

我脑海中浮现的第一件事就是持久的DB连接。持久连接将使用到您的DB服务器的连接池,这些连接将在请求之间持久化,即保持打开状态,以避免TCP握手。这是一个性能优化,但可以超过您的MySQL服务器的连接限制。

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

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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14333255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档