perl dbi жрёт память

tokuchu

Никто не подскажет где засада? Делаю select кучи строчек из базы данных и засовываю их в другую базу данных. Вот основной цикл:
my $cnt = 0;
while (1)
{
my @row = $qi->fetchrow_array;
@row or last;

++$cnt;
if ($cnt % 100000 == 0)
{
debug("cnt = $cnt");
$dbo->do('COMMIT;');
$dbo->do('BEGIN;');
}
$qo->execute(@row);
}

Наблюдаю как perl с течением времени жрёт памяти всё больше и больше. Зачем она ему нужна — не понимаю.
Это происходит под вендой, strawberry perl, если имеет значение.

tokuchu

Хотя, конечно, это может не сам Perl, а глючный драйвер какой-нибудь. Я через ODBC подключаюсь к ораклу. Но тоже как бы его заставить себя вести лучше...

tokuchu

Блин, разбил на порции делаю: connect, цикл, disconnect. Повторяю для других порций. И всё равно не освобождается. Придётся, видимо, для каждой порции по отдельному процессу пускать. :(

okis

Придётся, видимо, для каждой порции по отдельному процессу пускать.
если всё так просто, то зачем перл?

tokuchu

если всё так просто, то зачем перл?
Не понял вопроса. :)

okis

Я предположил, что исходя из того, что тебе легко запустить несколько потоков с перлом, тебе будет нетрудно и переписать это на С, где таких проблем не возникнет в принципе.

tokuchu

Я предположил, что исходя из того, что тебе легко запустить несколько потоков с перлом, тебе будет нетрудно и переписать это на С, где таких проблем не возникнет в принципе.
Не, я не потоки имел в виду, а просто последовательно запустить процессы. :)

Barbie29

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

tokuchu

Ну тут если только dbh обнулить попробовать. Этого вроде не делал.

ava3443

Я через ODBC подключаюсь к ораклу.
как вариант, попробуй DBD::Oracle вместо ODBC...

Werdna

Никто не подскажет где засада?
в использовании говна perl dbi.

tokuchu

как вариант, попробуй DBD::Oracle вместо ODBC...
Это труднореализуемый вариант. ODBC у меня сейчас есть "изкаропки" (можно сказать а для Oracle придётся знатно потрахаться.

tokuchu

в использовании говна perl dbi.
Альтернативы?

rosali

это настоящий код или эскиз? ;)

tokuchu

это настоящий код или эскиз? ;)
От этого форма брошенной какашки изменится? Кидай уже, давай! :grin:

rosali

да нет просто я не вижу чему тут течь, думал может ты подсократил чего. а вообще попробуй fetchrow_arrayref для эксперимента, а вдруг.
кстате у тебя RaiseError => 1 надеюсь?

tokuchu

да нет просто я не вижу чему тут течь, думал может ты подсократил чего.
Не, это один из вариантов которые я пробовал. arrayref тоже было — ничего не менялось.
кстате у тебя RaiseError => 1 надеюсь?
Это хз как там по умолчанию. Оно на это влияет? :)

zya369

Альтернативы?

[-style] C [/-style]

serega1604

>[-style] C [/-style]
C - это не альтеранатива, а ответ на "главный вопрос жизни, вселенной и всего такого"

tokuchu

[-style] C [/-style]
В случае глючного ODBC-драйвера оно не спасёт. :p

Dasar

Альтернативы?
юзай C#, Люк.

tokuchu

юзай C#, Люк.
Сказал Дарт Вейдер. :grin:

Dasar

Сказал Дарт Вейдер.
папу надо слушать

tokuchu

папу надо слушать
Когда вернёшься на светлую сторону — я подумаю. :)
Оставить комментарий
Имя или ник:
Комментарий: