sql >> Database >  >> RDS >> Mysql

geheugenlek in php-script

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 ....;


  1. Opgeslagen procedures schrijven voor professionele SSRS-rapporten

  2. Datumvoorwaarden met behulp van zoeklogica

  3. Een reeks SQL-query's uitvoeren met behulp van een batchbestand?

  4. SQL:zoek naar een string in elke varchar-kolom in een database