我研究了一下,发现使用mysql_use_result=1
可以缓解内存问题。但是,由于我是新手DBI module
,我不明白这里发生了什么:
#!/usr/bin/perl -w
use strict;
use DBI;
my $dbh = DBI>connect('DBI:mysql:blah;host=blah.blah.blah.blah;mysql_use_result=1','blah','blah',{RaiseError => 1});
my $sth = $dbh->prepare('select * from TaqMinute where tradeDate<=\'2014-04-22\' and symbol<=\'AAPL\' ;') ;
if (defined($sth)) {
$sth->execute();
my @row;
while (@row = $sth-> fetchrow_array()) {
print "@row\n" ;
}
}
$sth->finish();
$dbh->disconnect
在我添加mysql_use_result=1
之前,脚本会在大约1.5分钟后因抱怨内存不足而失败。添加后我的查询参数被忽略,我只是获取数据库中的所有数据。
如何帮助我或如何正确使用此switch
的任何想法?顺便说一句,我查询的数据库非常大。
提前致谢!
克雷格
答案 0 :(得分:1)
尝试使用参数化查询,可能是您的qoutes出了问题。
my $dbh = DBI>connect('DBI:mysql:blah;host=blah.blah.blah.blah','blah','blah',{RaiseError => 1});
my $sth = $dbh->prepare_cached('select * from TaqMinute where tradeDate<=? and symbol<=?') ;
die "sth undef!" if ! defined $sth;
$sth->execute('2014-04-22','AAPL');
while (my $rowref = $sth->fetchrow_arrayref()) {
print Dumper($rowref) ;
}
$sth->finish;