[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Скрипт сам останавливается
z3rg
такая проблема скрипт сам останавливается на локалке запускаю добавление записей из тхт в мускул и гдето 7000000 записей добавил и прекращает работу
как это можно исправить память стоит в пхп ини 1500МБ
в самом скрипте знаю както можно выделять память

PHP
<?
set_time_limit(0);
ignore_user_abort(true);

if(
$_GET['a']){
$db = new db;
$f fopen ("mmm.txt""r") or die ("Ошибка при открытии файла\n");
while (!
feof ($f))
{
$s fgets ($f255);

$s=trim($s);

$db->query("INSERT INTO `main` VALUES ('', '$s', '', '', '');");

$db->close();
}




Спустя 1 час, 28 минут, 50 секунд (22.06.2009 - 04:43) kirik написал(а):
Скорее всего не в памяти дело, а во времени выполнения. Попробуй директиву max_execution_time в php.ini на 0 поставить. Или просто запустить скрипт из командной строки.

Спустя 6 часов, 46 минут, 27 секунд (22.06.2009 - 11:29) z3rg написал(а):
поставил max_execution_time в php.ini на 0, всеравно останавливается ((
может с памятью всеже

HTML
max_execution_time = 0 ; Maximum execution time of each script, in seconds
max_input_time = 60 ; Maximum amount of time each script may spend parsing request data
;max_input_nesting_level = 64 ; Maximum input variable nesting level
memory_limit = 2526M


скрипт останавливается приблизительно через 1:30 после запуска

Спустя 24 минуты, 45 секунд (22.06.2009 - 11:54) sergeiss написал(а):
Добавлять столько записей через инсерты... Это изврат полный!!!! Есть же специальные команды для загрузки структурированного файла. Во всех более-менее нормальных БД.
В мускуле это, вроде бы, LOAD DATA INFILE или что-то в этом духе.
Попробуй поменять принцип загрузки. Возможно, что проблема именно в большом количестве инсертов. А при "правильной" загрузке она, т.е. проблема, просто исчезнет.

Спустя 36 минут, 46 секунд (22.06.2009 - 12:31) FatCat написал(а):
Не проще воспользоваться готовыми решениями? BigDump, dumper от sypex.net...

Спустя 7 минут, 52 секунды (22.06.2009 - 12:39) glock18 написал(а):
На крайний случай, можно хотя бы делать запрос сразу на 20-30 записей - это если только с LOAD DATA INFILE никак не прокатит, потому что он будет намного быстрее даже этого.

Спустя 30 минут, 13 секунд (22.06.2009 - 13:09) z3rg написал(а):
4671648 insert и останавливается
sergeis, спасибо счас попробую

пробую через LOAD DATA INFILE
таблица называется `main` в ней 5 столбцов, нужно с mmm.txt данные занести в 2 столбец

запрос должен быть такой? в синтаксисе просто не очень понимаю

LOAD DATA INFILE 'mmm.txt' INTO TABLE `main` IGNORE 1 LINES

но выдает ошибку хз
Duplicate entry '4' for key 1

что никто незнает, или проще взять разбить и инсертом пусть фигачит

Спустя 2 часа, 31 минута, 42 секунды (22.06.2009 - 15:41) twin написал(а):
В пыхадмине при импорте есть разбивка. Запускай с того места, где остановился и все. Это же на один раз тебе надо

Спустя 47 минут, 31 секунда (22.06.2009 - 16:28) z3rg написал(а):
twin, да, только вот придется ставить 100 раз, база оч большая

а что если взять в базе столбци поубирать и запрсом
LOAD DATA INFILE 'mmm.txt' INTO TABLE `main`
поидее должно же так добавится если нельзя чтоб само во 2 столбец записвало

Спустя 4 минуты, 13 секунд (22.06.2009 - 16:32) sergeiss написал(а):
Так а в чем проблема-то? "Duplicate entry '4' for key 1" - вот это вот? Так сделай так, чтобы не было дублированных записей.
То есть, или в БД настрой так, чтобы они принимались, или настрой БД так, чтобы дублированные записи игнорировались, или сделай так, чтобы они вообще до БД не доходили.

Спустя 27 минут, 37 секунд (22.06.2009 - 17:00) z3rg написал(а):
оно наверное пишет в 1 столбец а там стоит инт
LOAD DATA INFILE 'mmm.txt' INTO TABLE `main` IGNORE 1 LINES
IGNORE 1 LINES - это я так понимаю в какой столбец писать или нет (тоесть игнорировать 1-писать во второй)

а на дублирование как я проверю, база говорюж очень большая, я ставил сразу при добавлении инсертом проверку у меня пока за час тока 200000 записей добавилось. а в базе дубли в столбце 2 разрешены

вроди разобрался с запросом ("LOAD DATA INFILE 'mmm.txt' INTO TABLE `main` (название столбца)");

Спустя 5 часов, 51 минута, 53 секунды (22.06.2009 - 22:52) sergeiss написал(а):
Если разобрался - то это хорошо smile.gif А вообще LINES - это строки, а не столбцы.

Спустя 1 день, 15 часов, 30 минут, 48 секунд (24.06.2009 - 14:23) z3rg написал(а):
sergeis, спасибо за помощь. но вот проблема осталось, скрипт всеравно сам остонавливается гдето через минут 50 после запуска, в чем может быть причина. Вобще не этот скрипт но всеже.

кстати запросом LOAD DATA INFILE 'mmm.txt' INTO TABLE `main` (название столбца)" добавило 60 000 000 за 2-3 минуты

Спустя 26 минут, 20 секунд (24.06.2009 - 14:49) glock18 написал(а):
Цитата (z3rg @ 24.06.2009 - 11:23)
через минут 50 после запуска

сервер может сам отбрасывать очень ресурсоемкие скрипты.

Спустя 17 минут, 22 секунды (24.06.2009 - 15:06) sergeiss написал(а):
Цитата (z3rg @ 24.06.2009 - 15:23)
скрипт всеравно сам остонавливается гдето через минут 50 после запуска, в чем может быть причина. Вобще не этот скрипт но всеже.

Лучше, если есть возможность, раздробить скрипт на несколько разных. И запускать их последовательно. Отработал один - от него запустился другой - первый отключился. И так далее, пока задача не будет выполнена.

Цитата (z3rg @ 24.06.2009 - 15:23)

кстати запросом LOAD DATA INFILE 'mmm.txt' INTO TABLE `main` (название столбца)" добавило 60 000 000 за 2-3 минуты

Это есть гут smile.gif

Спустя 11 минут, 12 секунд (24.06.2009 - 15:18) z3rg написал(а):
glock18, спасибо, тогда как сделать чтоб он не отбрасывал, я на локалке

sergeiss, ммм, тоже не вариант, скрипт завершается сам хз в какой момент, а идет проверка, если соответствует то добавляет в базу, за час только гдето 3000 инсертов, а сделать как ты говоришь впринципе можно, зациклить действие на 2 скрипта, тут проблема наверно в неправильно настроеном сервере нужно будет поспрашивать, спасибо за ответ.

Спустя 8 минут, 56 секунд (24.06.2009 - 15:27) glock18 написал(а):
z3rg, надо сделать, чтобы он не был таким ресурсоемким smile.gif

Спустя 23 минуты, 27 секунд (24.06.2009 - 15:50) sergeiss написал(а):
Цитата (z3rg @ 24.06.2009 - 16:18)
а идет проверка, если соответствует то добавляет в базу, за час только гдето 3000 инсертов

Быстрее будет писать в файл, и потом заливать готовый файл через тот же LOAD DATA....
А если чисто анализ, без инсертов, а вместо них выводить сообщение на экран - сколько времени занимает скрипт? Тоже попробуй для проверки. Скорее всего, проблема именно в большом количестве необоснованных инсертов.

Спустя 6 минут, 53 секунды (24.06.2009 - 15:57) glock18 написал(а):
два способа увеличить скорость без прибегания к файлу:

1. можно подготовить запрос с prepare. а затем только выполнять его с execute. повысит быстродействие в разы, думаю, а может и в десятки.

2. можно вставлять по 20 и больше строк за один запрос.

можно совместить - подготовить запрос на вставку 20 строк. а затем вставлять им по 20 строк. должно еще быстрее заработать smile.gif

Спустя 23 часа, 44 минуты, 40 секунд (25.06.2009 - 15:42) z3rg написал(а):
МММ, я счас о другом скрипте говорю, с этим разобрался зачто большое спасибо

идет массив к примеру
PHP
while($site=$db->get_array($site1)){

//и тут в зависимости от исходных значений в базе либо значения обновляются
//либо переносятся в другую базу и обновляется еще 2 параметра

}

обновления - ну к примеру проверка пинга сайта или же парсит ключевые слова

так вот гдето через 3000 проверок скрипт останавливается, я не думаю что он такой ресурсоемкий хотя хз моит так и есть

Спустя 3 часа, 53 минуты, 51 секунда (25.06.2009 - 19:35) twin написал(а):
Измерь. Самый простой способ - занизить вдвое разрешенную память и посмотреть, раньше остановится или нет.

Спустя 3 дня, 3 часа, 9 минут, 10 секунд (28.06.2009 - 22:45) z3rg написал(а):
twin, спасибо, измерил - разобрался ))) жесть, в функции для работы с мускулом стоял лимит.
Быстрый ответ:

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