Tôi đang viết tập lệnh theo lô và nhận được lỗi Allowed memory size of 134217728 bytes exhausted
.Tại sao "Kích thước bộ nhớ được phép cạn kiệt"?
Tôi không hiểu tại sao bộ nhớ được lấp đầy. Tôi đã thử xóa biến số $row
, nhưng điều đó không thay đổi gì cả. Đây là mã của tôi:
// ... (sql connection)
$result = mysql_query("SELECT * FROM large_table");
while ($row = mysql_fetch_array($result)) {
echo $row['id'] . PHP_EOL;
unset($row);
}
(đơn giản hóa code)
Tại sao bộ nhớ lấp đầy, và làm thế nào tôi có thể tránh nó?
Lưu ý: đây là tập lệnh theo lô. Điều này là bình thường mà tôi phải xử lý dữ liệu như vậy (đi qua 1 triệu dòng).
Cập nhật: Việc hết bộ nhớ xảy ra xung quanh dòng 400 000, vì vậy điều này phải là thứ gì đó trong vòng lặp? Tôi muốn tránh phải thực hiện phân trang nếu có thể.
Nó không giống như bạn nên chạy ra khỏi bộ nhớ từ đoạn mã đó. Có một số biến khác đang phát triển mỗi lần lặp? –
sẽ không truy vấn mysql thực sự trả về toàn bộ bảng -> có nghĩa là kết quả sẽ được tính vào bộ nhớ đã sử dụng? – KillerX
Có thể là một gợi ý ngớ ngẩn, nhưng đó là điều duy nhất tôi có thể nghĩ đến: có lẽ bạn có thể thử xả bộ đệm đầu ra của mình? – Martijn