sql >> Base de Datos >  >> RDS >> Mysql

pérdida de memoria en script php

Esta pérdida de memoria solo sería un problema si está eliminando el script con un error de "memoria agotada". PHP felizmente recolectará basura cualquier objeto/variable no utilizado por sí mismo, pero el recolector no se activará hasta que tenga que hacerlo; la recolección de basura puede ser una operación muy costosa.

Es normal ver un aumento en el uso de la memoria, incluso si está reutilizando constantemente los mismos objetos/variables; no es hasta que el uso de la memoria supera un cierto nivel que el recopilador se activará y limpiará la casa.

Sospecho que podría hacer que las cosas funcionen mucho más rápido si agrupara los ID de usuario en lotes y emitiera menos actualizaciones, cambiando más registros con cada uno. p.ej. haz lo siguiente:

UPDATE user_roundscores SET ursUpdDate=NOW() WHERE ursUserTeamIdFK IN (id1, id2, id3, id4, id5, etc...)

en lugar de hacerlo una actualización por usuario. Menos viajes de ida y vuelta a través de la capa de interfaz de base de datos y más tiempo en el servidor =ejecución más rápida.

Además, considere el impacto de expandir esto ahora a millones de usuarios, como dice en un comentario. Un millón de actualizaciones individuales tardarán una cantidad de tiempo no trivial en ejecutarse, por lo que NOW() no será una "constante". Si tarda 5 minutos en hacer la ejecución completa, obtendrá una amplia variedad de ursUpdDate marcas de tiempo Es posible que desee considerar almacenar en caché un único NOW() llame a una variable del lado del servidor y emita las actualizaciones contra esa variable:

 SELECT @cachednow :p NOW();
 UPDATE .... SET ursUpDate = @cachednow WHERE ....;