[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Скрипт пожирает память
Adil
Ребята доброй ночи. Уже мозг взрывается от не понимания ситуации и решил, может вы дадите цельный совет.

Проблема в том, что скрипт при выборке данных из бд потребляет много памяти, или может мне так кажется.

Так вот, есть база данных 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)
Цитата (vital @ 9.05.2012 - 14:12)
Все он нормально очищает. unset() не забывайте.


после каждой ненужной переменной по натыкал unset(), не помогло.
Поэтому и написал, может из вида что-то упускаю.

Ну код в студию.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.