cPanel を使用して、共有ホスティング環境で多数の PHP メンテナンス スクリプトを実行しています。ほとんどのスクリプトは 3 ~ 4 時間ごとに実行する必要があり、その実行を簡素化するために、実行する必要があるスクリプト (存在する場合) をチェックし、必要に応じて実行するスケジューラ スクリプトを作成しました。cron でスケジューラ スクリプトを 5 分ごとに実行するように設定しました。スクリプトは、現在予定されているメンテナンス タスクがないことを検出した場合、何もしません。スケジューラを呼び出すオーバーヘッドにより、約 5 つの短い SQL クエリが実行されます (したがって、これらは 5 分ごとに実行されます)。
私のホストが許可された制限をはるかに超えていると主張して、MySQL の使用率が高いと不平を言うまで、すべてが正常に機能していました。スケジューラの cron ジョブを無効にした後、リソースの使用量が 0 になりました。
- cron ジョブを無効にする前: MySQL proc の数 (平均) - 0.97
- cron ジョブを無効にした後: MySQL proc の数 (平均) - 0.00
奇妙なことに、cron ジョブを削除した後も、数時間ごとにブラウザから手動でスケジューラ スクリプトをアクティブにし続けていました。スクリプトはまだ実行されていたので、MySQL プロセスの平均数が劇的に減少したことに非常に驚きました。cron ジョブを無効にする前に、スケジューラとメンテナンス スクリプトによって実行された SQL クエリの数を記録し始めました。
- cron ジョブを無効にする前: 1 日あたり 9899 件のクエリ (平均)
- cron ジョブを無効にした後: 1 日あたり 9552 クエリ (平均)
そのため、スケジューラーを手動で呼び出した場合でも、cron とほぼ同じ数の SQL クエリを実行しましたが、どういうわけか、MySQL の使用量は基本的にゼロにまで低下しました。
php コマンドを使用して cron ジョブを介して PHP スクリプトを実行する場合と、ブラウザーを介して呼び出す場合とでは、パフォーマンスに関連する違いはありますか? スクリプトでデータベース接続を明示的に閉じません。これは、実行の最後に自動的に行われることを理解していたからです。スクリプトが cron 経由で実行されているときに、この接続が開いたままになる可能性はありますか? cron を使用した場合の実質的なパフォーマンスの違いについて、他にどのような説明があるでしょうか?