Dit geheugenlek zou alleen een probleem zijn als het het script doodt met een "geheugen uitgeput"-fout. PHP verzamelt met plezier alle ongebruikte objecten/variabelen op zichzelf, maar de verzamelaar schopt niet totdat het moet - het verzamelen van afval kan een erg dure operatie zijn.
Het is normaal om het geheugengebruik te zien stijgen, zelfs als je constant dezelfde objecten/variabelen hergebruikt - pas als het geheugengebruik een bepaald niveau overschrijdt, zal de verzamelaar starten en het huis schoonmaken.
Ik vermoed dat je dingen veel sneller zou kunnen laten werken als je gebruikers-ID's in groepen zou verdelen en minder updates zou uitgeven, waarbij je meer records met elk zou wijzigen. bijv. doe het volgende:
UPDATE user_roundscores SET ursUpdDate=NOW() WHERE ursUserTeamIdFK IN (id1, id2, id3, id4, id5, etc...)
in plaats van het één update per gebruiker te doen. Minder round-trips door de DB-interfacelaag en meer tijd op de server =sneller werken.
Overweeg ook de impact van het nu uitbreiden naar miljoenen gebruikers, zoals u in een opmerking zegt. Een miljoen individuele updates zullen een niet-triviale hoeveelheid tijd in beslag nemen, dus de NOW()
zal geen "constante" zijn. Als het 5 minuten duurt om de volledige run te doen, dan krijg je een grote verscheidenheid aan ursUpdDate
tijdstempels. U kunt overwegen om een enkele NOW()
. in de cache op te slaan roep een server-side variabele aan en geef de updates voor die variabele uit:
SELECT @cachednow :p NOW();
UPDATE .... SET ursUpDate = @cachednow WHERE ....;