SQLからデータを取得する単純なperlスクリプトです。 データを読み取り、ファイルOUTFILEに書き込み、10000行ごとに画面にデータを印刷します。Perl SQLファイルの書き込みが遅れた
私は好奇心が強いですが、画面上のデータの印刷が非常に早く(30秒で)終了しますが、ファイルへのデータの取り込みと書き込みは非常に遅く終了します(30分後)。
データ量は大きくありません。出力ファイルのサイズは100Mバイト未満です。
while (my ($a,$b) = $curSqlEid->fetchrow_array())
{
printf OUTFILE ("%s,%d\n", $a,$b);
$counter ++;
if($counter % 10000 == 0){
printf ("%s,%d\n", $a,$b);
}
}
$curSqlEid->finish();
$dbh->disconnect();
close(OUTFILE);
ファイルに書き込む前に画面に情報が表示されていますか?それは確かに意味がないので。しかし、そうでなければ、特にmysqlデータベースがすべてのレコードに対して同時に読み書きすることができる同じファイルシステム上にある場合、ファイルの書き込みが遅くなる可能性があります。 – Cfreak
はい、画面にすべてが表示された後(結果の10000行ごとに印刷)、出力ファイルを取得するために30分待たなければなりません。 – notilas