Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

vazamento de memória no script php


Esse vazamento de memória só seria um problema se estivesse matando o script com um erro de "memória esgotada". O PHP felizmente coletará o lixo de qualquer objeto/variável não utilizado por conta própria, mas o coletor não irá chutar até que seja necessário - a coleta de lixo pode ser uma operação muito cara.

É normal ver o uso de memória aumentar mesmo se você estiver constantemente reutilizando os mesmos objetos/variáveis ​​- não é até que o uso de memória exceda um certo nível que o coletor será acionado e limpa a casa.

Suspeito que você poderia tornar as coisas muito mais rápidas se agrupasse IDs de usuário em grupos e emitisse menos atualizações, alterando mais registros com cada um. por exemplo. faça o seguinte:
UPDATE user_roundscores SET ursUpdDate=NOW() WHERE ursUserTeamIdFK IN (id1, id2, id3, id4, id5, etc...)

em vez de fazer uma atualização por usuário. Menos viagens de ida e volta pela camada de interface de banco de dados e mais tempo no servidor =execução mais rápida.

Além disso, considere o impacto de agora expandir isso para milhões de usuários, como você diz em um comentário. Um milhão de atualizações individuais levarão um tempo não trivial para serem executadas, então o NOW() não será uma "constante". Se levar 5 minutos para fazer a execução completa, você obterá uma grande variedade de ursUpdDate carimbos de data/hora. Você pode querer considerar o cache de um único NOW() chame uma variável do lado do servidor e emita as atualizações nessa variável:
 SELECT @cachednow :p NOW();
 UPDATE .... SET ursUpDate = @cachednow WHERE ....;