0
sub fetch_ms_table {
$ms_initial_cnt = 0;
$logger->info("begin fetching TACCTTREE_MS");
$SQL = "select $pk_string,LINK_C,LENGTH_Q,PATHS_Q from TACCTTREE_MS tree1 where OUT_Z>\"$process_time\"";
&execsql($dbp, $SQL);
$cnt = 0;
$cnt1 = 0;
#load the MILESTONE table data
while (@data = $dbp->dbnextrow()) {
$data[0] =~ s/\s+//g;
$taccttree_ms_cache{ $data[0] }{status} = "d"; #default the record as deleted.
$taccttree_ms_cache{ $data[0] }{pk} = $data[0];
$taccttree_ms_cache{ $data[0] }{LINK_C} = $data[1];
$taccttree_ms_cache{ $data[0] }{LENGTH_Q} = $data[2];
$taccttree_ms_cache{ $data[0] }{PATHS_Q} = $data[3];
$ms_initial_cnt++;
}
$logger->info("end fetching taccttree_MS - fetched $ms_initial_cnt rows");
}
上述功能失敗給下面的日誌,內存不足!在Perl程序
INFO> main::fetch_ms_table begin fetching TACCTTREE_MS
Failed for 'Milestone TACCTTREE table'
Std Err
Out of memory!
的SQL返回周圍5050402行。主程序調用兩次相同的子程序。第一次它通過罰款和第二次失敗的內存不足
你的系統有多少內存?如果你對記憶非常緊張,你將不得不以批量方式獲取結果。 – tadman
您正在使用大約二十年前的Perl 4標準。請在程序的頂部添加'use strict'和'使用warnings',並從所有子程序調用中刪除和號'&'。 – Borodin
'$ pk_string'是什麼?和'execsql'? – Borodin