質問: PHP5.3でバッチ実行処理を作っています。 処理の中で、DBからのSELECT/UPDATEを繰り返すループ処理が結構あります。 これが非常に負荷になると思うのですが、どの程度のループ回数で、何秒ほどの遅延を発生させるべきでしょうか? また、停止はsleep()関数を使用するのが一般的でしょうか? 実行サーバーはLinux(CentOS6.4)です。 ご回答お願い致します。
回答: 仰るとおり、処理の一時停止にはsleep()関数が一般的です。 もし、1秒未満でsleepさせたい場合は usleep()を使ってください。 ``` $i = 0; // 1000回LOOP foreach (range(0, 1000) as $v) { // 100回に1度1秒間遅延する if( $i % 100 === 0) { echo $i . PHP_EOL; sleep(1); } $i++; } ``` 頻度と停止時間の判断は難しいですね。 私は100回に1秒程度入れる事が多いですが、 判断軸としては 1. バッチの実行間隔 (1時間に1回なら1時間は絶対に超えないようにとかです) 2. バッチ実行サーバ、DBサーバのLoadAverageやiowaitは必ず見ながら判断しています。 LoadAverageなら**topコマンド**、 iowaitなら**vmstat**、**sarコマンド**等で確認が出来ます。