Проблема в том, что скрипт при выборке данных из бд потребляет много памяти, или может мне так кажется.
Так вот, есть база данных mysql (InnoDB).
В ней есть таблица, в которой пол миллиона данных.
Структура:
id
text
parent_id (прим.)
Так вот, в скрипте делаю запрос:
SELECT * FROM table ORDER BY id DESC LIMIT 400000
и смотрю в топе, скрипт потребляет все больше и больше памяти, и доходит до 1.6гб и нормально заканчивает свою работу.
Тк, сервер не сильный, всего на 2гб памяти, то я не могу уже сделать селект на пол миллиона записей, тк сервер падает.
Может вы мне дадите подсказку, что может быть не так? Почему так сильно пожирается оперативка?
Дело в том, что я беру эти данные, отправляю их по email и удаляю.
Я пытался делать по кускам, выбирая по 10 тыс записей, удаляя их, и заново рекурсивно запуская функцию, в надежде уничтожить лишний мусор и очистив память, начать заново.
Но как я понял, php так не очищает память, почему-то.
Вообщем у меня уже под ночь мозги встали, и я надеюсь на ваши ясные умы.
Спасибо заранее.
Спустя 1 час, 8 минут, 8 секунд (9.05.2012 - 06:00) Эли4ка написал(а):
Adil
а зачем Вам такая большая выборка за один раз?
а зачем Вам такая большая выборка за один раз?
Спустя 9 часов, 11 минут, 32 секунды (9.05.2012 - 15:12) vital написал(а):
Цитата |
Но как я понял, php так не очищает память, почему-то. |
Все он нормально очищает. unset() не забывайте.
Да и рекурсия вам ни к чему.
ПРостой
for ($i=0;$i<400000;$i+=10000){
$sql = 'SELECT * FROM.. LIMIT '.$i.', 10000';
Выдрали, отправили, unset();
}
Спустя 1 минута, 17 секунд (9.05.2012 - 15:13) Adil написал(а):
Цитата (Эли4ка @ 9.05.2012 - 05:00) |
Adil а зачем Вам такая большая выборка за один раз? |
Если бы этот скрипт запускался бы в браузере, то я бы сделал постраничку с js автопереходом, но тк скрипт будет запускаться из консоли, то невозможно так сделать.
Как писал выше, делал шаги методом рекурсии, но не помогло.
Спустя 1 минута, 15 секунд (9.05.2012 - 15:14) Adil написал(а):
Цитата (vital @ 9.05.2012 - 14:12) |
Все он нормально очищает. unset() не забывайте. |
после каждой ненужной переменной по натыкал unset(), не помогло.
Поэтому и написал, может из вида что-то упускаю.
Спустя 55 секунд (9.05.2012 - 15:15) vital написал(а):
Цитата (Adil @ 9.05.2012 - 13:14) | ||
после каждой ненужной переменной по натыкал unset(), не помогло. Поэтому и написал, может из вида что-то упускаю. |
Ну код в студию.