Tento únik paměti by byl problém pouze v případě, že zabíjí skript chybou „vyčerpání paměti“. PHP s radostí samo o sobě shromáždí všechny nepoužívané objekty/proměnné, ale sběratel nekopne, dokud nebude muset – shromažďování odpadu může být velmi nákladná operace.
Je normální, že využití paměti stoupá, i když neustále znovu používáte stejné objekty/proměnné – až když využití paměti překročí určitou úroveň, kolektor se spustí a uklidí dům.
Domnívám se, že byste mohli věci urychlit, pokud byste dávkovali ID uživatelů do skupin a vydávali méně aktualizací a každou z nich změnili více záznamů. např. proveďte následující:
UPDATE user_roundscores SET ursUpdDate=NOW() WHERE ursUserTeamIdFK IN (id1, id2, id3, id4, id5, etc...)
místo toho, abyste to dělali jednou aktualizací na uživatele. Méně zpátečních cest přes vrstvu rozhraní DB a více času na serveru =rychlejší běh.
Zvažte také dopad tohoto rozšíření na miliony uživatelů, jak uvádíte v komentáři. Spuštění milionu jednotlivých aktualizací zabere netriviální dobu, takže NOW()
nebude "konstanta". Pokud úplné spuštění zabere 5 minut, získáte širokou škálu ursUpdDate
časová razítka. Můžete zvážit uložení do mezipaměti jednoho NOW()
zavolejte proměnnou na straně serveru a vydejte aktualizace pro tuto proměnnou:
SELECT @cachednow :p NOW();
UPDATE .... SET ursUpDate = @cachednow WHERE ....;