Mysql
 sql >> Baza danych >  >> RDS >> Mysql

wyciek pamięci w skrypcie php

Ten wyciek pamięci byłby problemem tylko wtedy, gdyby zabijał skrypt błędem „wyczerpanie pamięci”. PHP z radością sam zbierze wszystkie nieużywane obiekty/zmienne, ale kolektor nie wykopie, dopóki nie będzie musiał - odśmiecanie może być bardzo kosztowną operacją.

To normalne, że zużycie pamięci rośnie, nawet jeśli ciągle używasz tych samych obiektów/zmiennych – dopiero wtedy, gdy zużycie pamięci przekroczy pewien poziom, kolektor uruchomi się i posprząta dom.

Podejrzewam, że możesz przyspieszyć działanie, jeśli podzielisz identyfikatory użytkowników na grupy i wydasz mniej aktualizacji, zmieniając w każdej z nich więcej rekordów. np. wykonaj następujące czynności:

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

zamiast robić to po jednej aktualizacji na użytkownika. Mniej podróży w obie strony przez warstwę interfejsu DB i więcej czasu na serwerze =szybsze działanie.

Rozważ również wpływ rozszerzenia tego na miliony użytkowników, jak mówisz w komentarzu. Uruchomienie miliona pojedynczych aktualizacji zajmie nietrywialną ilość czasu, więc NOW() nie będzie „stałą”. Jeśli wykonanie pełnego uruchomienia zajmie 5 minut, otrzymasz szeroką gamę ursUpdDate znaczniki czasu. Możesz rozważyć buforowanie pojedynczego NOW() wywołaj zmienną po stronie serwera i wydaj aktualizacje dla tej zmiennej:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql przechowywana-procedura:out parametr

  2. Najlepszy sposób na przechowywanie tagów dla szybkości w ogromnej tabeli

  3. Połączenie z bazą danych PHP i MYSQL oraz tworzenie tabel tylko raz

  4. MySQL 'user_id', w którym klauzula jest niejednoznacznym problemem

  5. Niezdefiniowany indeks:REMOTE_ADDR podczas migracji Laravel