Questa perdita di memoria sarebbe un problema solo se sta uccidendo lo script con un errore "memoria esaurita". PHP raccoglierà felicemente qualsiasi oggetto/variabile inutilizzato da solo, ma il raccoglitore non attiverà fino a quando non sarà necessario:la raccolta dei rifiuti può essere un'operazione molto costosa.
È normale vedere aumentare l'utilizzo della memoria anche se riutilizzi costantemente gli stessi oggetti/variabili:è solo quando l'utilizzo della memoria supera un certo livello che il collezionista si accenderà e pulirà la casa.
Sospetto che potresti far funzionare le cose molto più velocemente se hai raggruppato gli ID utente in gruppi e rilasciato meno aggiornamenti, modificando più record con ciascuno. per esempio. procedi come segue:
UPDATE user_roundscores SET ursUpdDate=NOW() WHERE ursUserTeamIdFK IN (id1, id2, id3, id4, id5, etc...)
invece di farlo un aggiornamento per utente. Meno round trip attraverso il livello di interfaccia DB e più tempo sul server =esecuzione più veloce.
Inoltre, considera l'impatto dell'espansione di questo ora a milioni di utenti, come dici in un commento. Un milione di singoli aggiornamenti richiederà un tempo non banale per essere eseguito, quindi NOW()
non sarà una "costante". Se ci vogliono 5 minuti per eseguire l'intera corsa, otterrai un'ampia varietà di ursUpdDate
timestamp. Potresti prendere in considerazione la possibilità di memorizzare nella cache un singolo NOW()
chiama una variabile lato server ed emette gli aggiornamenti rispetto a quella variabile:
SELECT @cachednow :p NOW();
UPDATE .... SET ursUpDate = @cachednow WHERE ....;