このメモリリークは、「メモリが使い果たされた」エラーでスクリプトを強制終了する場合にのみ問題になります。 PHPは、使用されていないオブジェクト/変数をそれ自体でガベージコレクションしますが、コレクターは必要になるまでキックしません。ガベージコレクションは非常にコストのかかる操作になる可能性があります。
同じオブジェクト/変数を絶えず再利用している場合でも、メモリ使用量が増加するのは正常です。メモリ使用量が特定のレベルを超えるまで、コレクターは起動して家を掃除しません。
userIDをグループにまとめて発行する更新を少なくし、それぞれでより多くのレコードを変更すれば、処理を大幅に高速化できると思います。例えば次の手順を実行します:
UPDATE user_roundscores SET ursUpdDate=NOW() WHERE ursUserTeamIdFK IN (id1, id2, id3, id4, id5, etc...)
ユーザーごとに1回更新する代わりに。 DBインターフェイスレイヤーを介したラウンドトリップが少なくなり、サーバーでの時間が長くなる=実行速度が速くなります。
同様に、コメントで言うように、これを数百万のユーザーに拡大した場合の影響を考慮してください。 100万件の個別の更新の実行には重要な時間がかかるため、NOW()
「一定」ではありません。フルランを実行するのに5分かかる場合は、さまざまなursUpdDate
を取得することになります。 タイムスタンプ。単一のNOW()
をキャッシュすることを検討することをお勧めします サーバー側の変数を呼び出し、その変数に対して更新を発行します。
SELECT @cachednow :p NOW();
UPDATE .... SET ursUpDate = @cachednow WHERE ....;