func_query("SELECT * FROM tbl limit 10000");
limit сейчас срабатывает, если его сделать более этой цифры, то не срабатывает.
эти настройки не помогают
сделал ini_set("memory_limit","128M");
set_time_limit(500);
спасибо!
Спустя 12 минут, 1 секунда (19.10.2011 - 18:36) m4a1fox написал(а):
Может сделать по кусочкам через sleep()?
Спустя 7 минут (19.10.2011 - 18:43) Guest написал(а):
И зачем тебе 10000 строк из таблицы за раз?
Спустя 2 минуты, 12 секунд (19.10.2011 - 18:45) Игорь_Vasinsky написал(а):
Чтоб браузер с большой прокруткой отобразил страницу.. этож весело на ноуте...
Спустя 6 минут, 43 секунды (19.10.2011 - 18:52) Guest написал(а):
да ладно вам парни, шутить))!
нужно за раз, реорганизовать большую базу, можно за два раза, но уже хуже, могут быть ошибки)
может есть еще варианты, как увеличить память, если в этом проблемы
нужно за раз, реорганизовать большую базу, можно за два раза, но уже хуже, могут быть ошибки)
может есть еще варианты, как увеличить память, если в этом проблемы
Спустя 2 минуты, 26 секунд (19.10.2011 - 18:54) Игорь_Vasinsky написал(а):
Так надо плисать от нотиса или варнинга, на что ругается то?
Спустя 6 минут, 19 секунд (19.10.2011 - 19:01) Guest написал(а):
Тогда пишем func_query("SELECT * FROM tbl");
и получаем всю таблицу.
и получаем всю таблицу.
Спустя 1 минута, 30 секунд (19.10.2011 - 19:02) Guest написал(а):
да, дельный совет про ошибки, спасибо!
придется по частям
Allowed memory size of 134217728 bytes exhausted
придется по частям
Allowed memory size of 134217728 bytes exhausted
Спустя 1 минута, 27 секунд (19.10.2011 - 19:04) Guest написал(а):
в htop проц зашкалил от нагрузки)
Спустя 2 минуты, 41 секунда (19.10.2011 - 19:06) Игорь_Vasinsky написал(а):
Guest
ну тогда ставь sleep() начни с 1сек, там посмотри, можешь увеличивать.
ну тогда ставь sleep() начни с 1сек, там посмотри, можешь увеличивать.
Спустя 7 минут, 40 секунд (19.10.2011 - 19:14) Zerstoren написал(а):
Может стоит делать unset ?
mysql_free_result ?
и другие манипуляции с памятью?
В конце концов, напишите о размере памяти прямо в php.ini
mysql_free_result ?
и другие манипуляции с памятью?
В конце концов, напишите о размере памяти прямо в php.ini
Спустя 6 минут, 47 секунд (19.10.2011 - 19:21) Семён написал(а):
Ради интереса, что у вас там за манипуляции?
Спустя 20 минут, 36 секунд (19.10.2011 - 19:41) Игорь_Vasinsky написал(а):
Guest
Цитата |
нужно за раз, реорганизовать большую базу, можно за два раза, но уже хуже, могут быть ошибки) |
Спустя 2 минуты, 13 секунд (19.10.2011 - 19:43) Guest написал(а):
не понял я как sllep пользоваться
вот идет запрос
mysql_result(..... limit 50000)
ставим sleep(5)
и что должно произойти, он же запрос на сервак отправляет, тот там вещает проц.,
настройки php.ini лучше не трогать
mysql_free_result только при отдаче скрипту поможет, у меня же вешает там на сервере
Ради интереса, что у вас там за манипуляции? - да жизнь заставила), надо базу реорганизовать, а записей тыщаа
вот идет запрос
mysql_result(..... limit 50000)
ставим sleep(5)
и что должно произойти, он же запрос на сервак отправляет, тот там вещает проц.,
настройки php.ini лучше не трогать
mysql_free_result только при отдаче скрипту поможет, у меня же вешает там на сервере
Ради интереса, что у вас там за манипуляции? - да жизнь заставила), надо базу реорганизовать, а записей тыщаа
Спустя 3 минуты, 1 секунда (19.10.2011 - 19:47) Игорь_Vasinsky написал(а):
Нужно делать запросы с задержкой в sleep(1);
Т.е. если ты знаешь скока строк в БД, ты разделяешь свои запросы на n-кол-во (допустим с лимитом в 1к - всё заботает, значит нужно кол-во строк/1000 - стока раз зделать запрос, каждый раз смещая LIMIT на 1000)
и после каждого запроса sleep(1)
Т.е. если ты знаешь скока строк в БД, ты разделяешь свои запросы на n-кол-во (допустим с лимитом в 1к - всё заботает, значит нужно кол-во строк/1000 - стока раз зделать запрос, каждый раз смещая LIMIT на 1000)
и после каждого запроса sleep(1)
Спустя 12 минут, 1 секунда (19.10.2011 - 19:59) Nikitian написал(а):
Не надо никаких задержек.
Тут 2 варианта проблемы:
1) скрипт не может получить результат запроса от бд - тут поможет mysql_unbuffered_query().
2) скрипт получается данные от бд, но в процессе обработки идёт накапливание и вылет с ошибкой. В этом случае надо не держать в памяти много данных.
Тут 2 варианта проблемы:
1) скрипт не может получить результат запроса от бд - тут поможет mysql_unbuffered_query().
2) скрипт получается данные от бд, но в процессе обработки идёт накапливание и вылет с ошибкой. В этом случае надо не держать в памяти много данных.
Спустя 1 час, 4 минуты, 1 секунда (19.10.2011 - 21:03) Guest написал(а):
не знаю как бороться с этим, если только по частям, делая по 1000 выборку, перезагрузка страницы, опять загрузка скрипта, опять перезагрузка ...
ini_set("memory_limit","125M");
set_time_limit(60);
$limit = 1000;
$count_rows = func_query("SELECT count(*) ...");
$cnt_rws = count($count_rows); // 14000 записей
$arr = array();
if ($cnt_rws) {
for ($t = 0; $t<=$cnt_rws; $t = $t + $limit)
{
ЕСЛИ использвать этот код
$с = mysql_unbuffered_query("select .....
limit $t, ".($t+$limit));
while ($row = mysql_fetch_assoc($c)) {
$arr[] = $c;
}
sleep(2);
ТО Fatal error: Allowed memory size of 131072000 bytes exhausted
ЕСЛИ использвать этот код
$с = mysql_func_query("select .....
limit $t, ".($t+$limit));
где mysql_func_query получаем масссив обычными mysql функциями
if (count($c)) {
foreach($c as $c) {
$arr[] = $c;
}
}
sleep(2);
ТО загружает двух ядерный проц и приходиться убивать процесс
}
}
Спустя 3 минуты, 45 секунд (19.10.2011 - 21:06) Nikitian написал(а):
Не пихайте все получаемые данные в массив - так память и засерается. получили данные - сделали с ними что-то и уничтожили. Не надо всё в память пихать, она не резиновая.
Спустя 1 минута, 33 секунды (19.10.2011 - 21:08) imbalance_hero написал(а):
Guest
Делаешь выборку на 100-500 записей, в цикле, потом берёшь выбор следующих записей, при этом не забываешь free_result применять, чтобы очищать результат выборки, и убивай все переменные, которые на пути встречаются, чтобы можно было жить.
И sleep не нужен тут. Просто запустил циклом, обработал - пошел дальше.
Только я не понимаю, зачем ты создаёшь мега-громадный массив? Для чего?
Делаешь выборку на 100-500 записей, в цикле, потом берёшь выбор следующих записей, при этом не забываешь free_result применять, чтобы очищать результат выборки, и убивай все переменные, которые на пути встречаются, чтобы можно было жить.
И sleep не нужен тут. Просто запустил циклом, обработал - пошел дальше.
Только я не понимаю, зачем ты создаёшь мега-громадный массив? Для чего?
Спустя 12 часов, 58 минут, 27 секунд (20.10.2011 - 10:06) Guest написал(а):
в общем само задание), видимо с него и надо было начать) наверно не хватает опыта решить самому
есть таблица записей 14 тысяч
id int autoincrement primary key
name varchar
soname varchar
Здесь есть как строки с уникальными, в единственном числе name и somane, так и по несколько строк с одними и теми же name и somane.
например
1 neek fed
2 vet ked
3 ved ked
4 dsd wds
5 dsd wds
В таблице нужно выбрать строки с одинаковыми name и somane, правильней сказать наборы строк, и эти наборы с одинаковыми name и somane обработать
вывод может быть такой, limit 150 строк, поскольку в php сделаю цикл по обходу всей таблице, пока всю ее не обойду
2 vet ked
3 ved ked
4 dsd wds
5 dsd wds
Как это можно сделать )?
есть таблица записей 14 тысяч
id int autoincrement primary key
name varchar
soname varchar
Здесь есть как строки с уникальными, в единственном числе name и somane, так и по несколько строк с одними и теми же name и somane.
например
1 neek fed
2 vet ked
3 ved ked
4 dsd wds
5 dsd wds
В таблице нужно выбрать строки с одинаковыми name и somane, правильней сказать наборы строк, и эти наборы с одинаковыми name и somane обработать
вывод может быть такой, limit 150 строк, поскольку в php сделаю цикл по обходу всей таблице, пока всю ее не обойду
2 vet ked
3 ved ked
4 dsd wds
5 dsd wds
Как это можно сделать )?
Спустя 1 час, 48 минут, 31 секунда (20.10.2011 - 11:55) imbalance_hero написал(а):
Guest
не СОНЕЙМ, а сЁнейм, ё = ur, surname
Там тебе надо выбрать дубли, где и фамилия и имя одинаковые? Или где одинаковое только имя или только фамилия? Я что-то не понял, что должно быть одинаковым?
Тебе надо именно выбрать дубликаты записей по фамилии и имени?
не СОНЕЙМ, а сЁнейм, ё = ur, surname
Там тебе надо выбрать дубли, где и фамилия и имя одинаковые? Или где одинаковое только имя или только фамилия? Я что-то не понял, что должно быть одинаковым?
Тебе надо именно выбрать дубликаты записей по фамилии и имени?
Спустя 1 час, 2 минуты, 38 секунд (20.10.2011 - 12:57) Guest написал(а):
тебе надо именно выбрать дубликаты записей по фамилии и имени?
верно верно
верно верно
Спустя 45 минут, 33 секунды (20.10.2011 - 13:43) imbalance_hero написал(а):
Тебе надо со всеми записями сделать изменения? Или с одной из них?
Спустя 5 минут, 55 секунд (20.10.2011 - 13:49) Guest написал(а):
из 14000 записей выбрать все дубликаты, и с этими дубликатами совершить определенные действия, связанные с другими таблицами.
в общем то я практически решил задачу, может не оптимально, но проц уже загружается на 30 процентов при выполнении сктипта и работает он 60 секунд. Если предложите алгоритм или как лучше решить, будет очень интересно посмотреть
в общем то я практически решил задачу, может не оптимально, но проц уже загружается на 30 процентов при выполнении сктипта и работает он 60 секунд. Если предложите алгоритм или как лучше решить, будет очень интересно посмотреть
Спустя 28 минут, 3 секунды (20.10.2011 - 14:17) imbalance_hero написал(а):
Guest
Не пробовал делать выборку в таком стиле как concat, можно попробовать так.
К тому же выборка из БД идёт одна, она даже при максимуме будет несколько секунд идти, вся нагрузка лежит уже на обработке данных, полученных после запроса.
Так почему же ты в таком случае жалуешься на запрос? Мне кажется, что вся задержка как раз в другом месте.
SELECT * FROM `table`
WHERE CONCAT(`name`,`surname`) IN (
SELECT CONCAT (`name`,`surname`)
FROM `table`
GROUP BY `surname`,name
HAVING COUNT(*) > 1
)
Не пробовал делать выборку в таком стиле как concat, можно попробовать так.
К тому же выборка из БД идёт одна, она даже при максимуме будет несколько секунд идти, вся нагрузка лежит уже на обработке данных, полученных после запроса.
Так почему же ты в таком случае жалуешься на запрос? Мне кажется, что вся задержка как раз в другом месте.
Спустя 2 часа, 19 минут, 54 секунды (20.10.2011 - 16:37) Guest написал(а):
в общем, я понял где ошибся, и как надо было делать первоначально, вообще то зря недооценивал Mysql, когда была возможность, надо было изучать мускул, печалька)
помогите пжст запрос исправить, который есть. я его как смог поправил, но не работает пока, в стиле как concat
сейчас ругается на #1054 - Unknown column 'c.firstname' in 'on clause'
помогите пжст запрос исправить, который есть. я его как смог поправил, но не работает пока, в стиле как concat
сейчас ругается на #1054 - Unknown column 'c.firstname' in 'on clause'
select c.id, c.email, c.firstname, c.lastname, ab.zipcode, count(*) as orders_cnt_per_account
from cot c, add_book as ab, ordrs as o
JOIN (
select c.id, c.email, c.firstname, c.lastname, ab.zipcode, COUNT(*) cnt
from cot c, add_book as ab, ordrs as o
where o.userid=c.id and ab.userid=c.id and ab.default_b = 'Y'
group by c.firstname, c.lastname
HAVING cnt>1
) t2
ON (c.firstname= t2.firstname AND c.lastname= t2.lastname)
where o.userid=c.id and ab.userid=c.id and ab.default_b = 'Y'
group by c.id
order by c.email;
Спустя 16 минут, 55 секунд (20.10.2011 - 16:54) imbalance_hero написал(а):
Guest
Когда делаешь подзапрос, имена другие таблицам давай, потому что одно имя перебивает второе.
Когда делаешь подзапрос, имена другие таблицам давай, потому что одно имя перебивает второе.