Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

rò rỉ bộ nhớ trong tập lệnh php

Rò rỉ bộ nhớ này sẽ chỉ là một vấn đề nếu nó giết tập lệnh với lỗi "cạn kiệt bộ nhớ". PHP sẽ vui vẻ thu thập bất kỳ đối tượng / biến không sử dụng được nào của riêng nó, nhưng trình thu thập sẽ không khởi động cho đến khi nó phải làm vậy - thu gom rác có thể là một hoạt động rất tốn kém.

Việc sử dụng bộ nhớ tăng cao là điều bình thường ngay cả khi bạn liên tục sử dụng lại các đối tượng / biến giống nhau - phải đến khi mức sử dụng bộ nhớ vượt quá một mức nhất định, bộ sưu tập mới kích hoạt và dọn dẹp nhà cửa.

Tôi nghi ngờ rằng bạn có thể làm cho mọi thứ chạy nhanh hơn nhiều nếu bạn chia nhóm userID thành các nhóm và phát hành ít bản cập nhật hơn, thay đổi nhiều bản ghi hơn với mỗi nhóm. ví dụ. làm như sau:

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

thay vì thực hiện một lần cập nhật cho mỗi người dùng. Ít chuyến đi vòng qua lớp giao diện DB và nhiều thời gian hơn trên máy chủ =chạy nhanh hơn.

Ngoài ra, hãy xem xét tác động của việc hiện đang mở rộng điều này cho hàng triệu người dùng, như bạn nói trong một nhận xét. Một triệu bản cập nhật riêng lẻ sẽ mất một khoảng thời gian không nhỏ để chạy, vì vậy NOW() sẽ không phải là một "hằng số". Nếu mất 5 phút để chạy toàn bộ, thì bạn sẽ nhận được nhiều loại ursUpdDate dấu thời gian. Bạn có thể muốn xem xét lưu vào bộ nhớ cache một NOW() gọi trong một biến phía máy chủ và đưa ra các bản cập nhật đối với biến đó:

 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. Tạo truy vấn tùy chỉnh với Spring DATA JPA?

  2. Truy vấn SQL RAW với Zend Framework

  3. chèn dữ liệu bằng Trình kết nối mysql trong python

  4. Tìm kiếm nhiều mục trong nhiều cột

  5. Một lỗi UnicodeEncodeError khác khi sử dụng phương thức pandas to_sql với MySQL