Просьба помочь новичку.
Есть перловый скриптик который извлекает данные из БД mysql, в которую я положил access.log (squid). Задача извлечь данные, отформатирывать и вогнать в другую чистую базу.
Результат работы нынешнего скриптика такой, если использовать LIMIT 1000000 то все работает (за исключением того что print отрабатывает раз в минуту, при этом наполнение базы err_r происходит по частям, часть в одну минуту через минуту еще часть и.т.д), если LINIT 60000000 (реальное кол-во записей в базе) или без лимита то perl выедает всю доступную память, естественно как только он выгреб 90% свопа я его грохнул.
Вопрос такой: Как можно просматривать вывод каждой строчки при кажой интерации цикла и как можно избежать чрезмерного загребания памяти?Сам скрипт:
#!/usr/bin/perl
# PERL MODULE WE WILL BE USING
use Mysql;
use DBI;
use DBD::mysql;
use Socket;
# MySQL CONFIG VARIABLES
$host = "localhost";
$database = "squid";
$table = "log";
$user = "root";
$pw = "";
$dbh = Mysql->connect($host, $database);
$query = "SELECT * FROM log";
$sth = $dbh->Query($query) or die $Mysql::db_errstr;
while (@full_row = $sth->FetchRow()) {
$temp=$full_row[3];
$query = "SELECT id FROM err_r WHERE err_name = '$temp'";
$sterr = $dbh->Query($query) or die $Mysql::db_errstr;
$qresult = $sterr->FetchRow;
if ($qresult == NULL) {
$query = "INSERT err_r VALUES (NULL,'$temp')";
$dbh -> query($query);
}
$full_row[3]=$qresult;
print "@full_row\n";
}
Заранее спасибо.
P.S