sql >> Databasteknik >  >> RDS >> Mysql

minnesläcka i php-skript

Denna minnesläcka skulle bara vara ett problem om den dödar skriptet med ett "minne slut"-fel. PHP kommer gladeligen att samla in ovanliga föremål/variabler på egen hand, men samlaren kommer inte att sparka förrän den måste - sophämtning kan vara en mycket dyr operation.

Det är normalt att se minnesanvändningen stiga även om du ständigt återanvänder samma objekt/variabler - det är inte förrän minnesanvändningen överstiger en viss nivå som samlaren kommer att elda upp och städa huset.

Jag misstänker att du kan få saker att gå mycket snabbare om du batchade användar-ID:n i grupper och utfärdade färre uppdateringar och ändrade fler poster med varje. t.ex. gör följande:

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

istället för att göra det en uppdatering per användare. Färre rundresor genom DB-gränssnittslagret och mer tid på servern =snabbare drift.

Tänk också på effekten av att nu utöka detta till miljontals användare, som du säger i en kommentar. En miljon individuella uppdateringar kommer att ta en icke-trivial tid att köra, så NOW() kommer inte att vara en "konstant". Om det tar 5 minuter att göra hela körningen kommer du att få en mängd olika ursUpdDate tidsstämplar. Du kanske vill överväga att cachelagra en enda NOW() anropa en variabel på serversidan och utfärda uppdateringarna mot den variabeln:

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


  1. Skillnaden mellan sql-satser och klausul

  2. Förhindra två användare från att redigera samma data

  3. Hur man inaktiverar alla kontrollbegränsningar i SQL Server Database - SQL Server / TSQL självstudie del 87

  4. Förstå PostgreSQL-datumtyper och funktioner (genom exempel)