免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3840 | 回复: 10
打印 上一主题 下一主题

请教perl插入数据到oracle的效率问题!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-01-18 15:40 |只看该作者 |倒序浏览
我的代码如下:
use DBI;
use IO::File;
use POSIX qw(strftime);

$input = IO::File->new("test.bcp");


$dbh=DBI->connect("dbi:Oracle:host=$host;sid=orcl", $user, $passwd) || die "Database connection not made: $DBI::errstr";
$sth = $dbh->prepare("INSERT INTO table(14个字段) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)");

while (defined($line = $input->getline()))
{
    chomp($line);
     @datarry=split(/\t/,$line);
    $snum++;

        。。。对每个字段的处理。。。

   $sth->execute(14个变量);   
   
}
$input->close();
$sth->finish();
$dbh->disconnect();
exit;

上面是我的代码,因为项目保密的关系,数据库字段被我隐藏了。
我是从一个文件读取每行记录,每行记录有14个字段,每次读一行入库。文件有3千5百多万行记录。用我的脚本执行了
差不多2天。应该是有严重的效率问题吧。
请高手帮我分析一下。数据库应该是没有什么问题的。同事拿c语言写入库程序感觉入库快多了。

论坛徽章:
0
2 [报告]
发表于 2011-01-18 16:08 |只看该作者
用C有多快?1小时?

论坛徽章:
0
3 [报告]
发表于 2011-01-18 16:20 |只看该作者
为啥不能直接用sql loader?

论坛徽章:
0
4 [报告]
发表于 2011-01-18 16:22 |只看该作者
为啥不能直接用sql loader?
lkk2003rty 发表于 2011-01-18 16:20



    因为他需要“。。。对每个字段的处理。。。”吧?LZ

论坛徽章:
0
5 [报告]
发表于 2011-01-18 17:20 |只看该作者
回复 4# yiten


是的,这个数据文件文件有近4G,每行有不止14个字段,我只取14个字段信息,处理后再入库。
我是感觉慢,我感觉3千多万行数据部应该入库近两天吧,太不可思议了,我是头一回遇到这么大数据量。
也不知道是不是模式匹配split那里慢。要是c语言的话,我可以拿gprof分析函数性能,perl还真不知道程序里是哪一步最慢了.

论坛徽章:
1
天蝎座
日期:2014-07-30 14:53:19
6 [报告]
发表于 2011-01-18 17:45 |只看该作者
如果用perl可以 用$sth_o->bind_param_array(),$sth_o->execute_array()。
如果是为了效率可以用oracle的 external table

论坛徽章:
1
天蝎座
日期:2014-07-30 14:53:19
7 [报告]
发表于 2011-01-18 17:46 |只看该作者
你一条一条的insert肯定慢

论坛徽章:
0
8 [报告]
发表于 2011-01-18 17:58 |只看该作者
回复 4# yiten


    囧 木有注意看  看看楼主是怎么处理字段的  如果sqlloader 能做到的话 就用sqlloader

论坛徽章:
0
9 [报告]
发表于 2011-01-18 18:36 |只看该作者
建议插入时关闭自动提交,然后每10w条提交一次

论坛徽章:
0
10 [报告]
发表于 2011-01-18 20:25 |只看该作者
用perl把该处理的处理完,再sqlldr不行么
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP