sqlldr装在效率问题,请高手给个方案,有具体环境描述

kostion 2009-03-25 01:03:35
linux 企业4,Oracle10g。我们有20台产生数据的文件服务器。有4台入库服务器(linux企业4),平均每台入库服务器上挂4台数据服务器,所以台入库服务器上都会起4个入库程序的进程。每个进程会起20-50个sqlldr进程。所以一共就是(20*20) - (20*50) 个sqlldr进程存在(只要sqlldr进程数少于我设置的20或者50,入库程序就会自己补充sqlldr进程)。现在情况是这样的,在入库程序启动20分钟左右,就会发现sqlldr进程阻塞,而且时间特别长,我估计是sqlldr参数设置的问题。请高手帮忙分析一下,一下是我现在sqlldr语句,看看能不能针对我的状况,改进一下,解决sqlldr阻塞的问题。谢谢
sqlldr userid=%s/%s@%s SILENT=HEADER,FEEDBACK direct=true parallel=true"

" SKIP_INDEX_MAINTENANCE=true"

" control=%s.ctl"

" discard=%s.dsc"

" bad=%s.bad"

" log=%s.log &",............

是不是有什么参数可以改进sqlldr的效率。
...全文
577 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
kostion 2009-03-26
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 yhuib 的回复:]
难道不能减少并发数量吗?
[/Quote]
可以啊,20台数据产生服务器,每台的数据都要入库,你说每台的并发数设置多少为号。是每台。
yhuib 2009-03-26
  • 打赏
  • 举报
回复
难道不能减少并发数量吗?
kostion 2009-03-26
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 yhuib 的回复:]
引用 6 楼 kostion 的回复:
引用 4 楼 yhuib 的回复:
才两百条?至于用sqlldr嘛,直接insert就好啦,sqlpldr要做不少准备工作的,数据量少的话效率很低的


这个项目之前不是我做的,虽然每个数据文件,数据量很少,入库服务器是在不停的起sqlldr的,而且时间是不间隔的,在同一时间,有500的sqlldr进程在并发,是不是太多了,导致了sqlldr进程的阻塞。

500个并发sqlldr处理小文件?还是改改吧,最起码减少并发的数量。小…
[/Quote]

入库之前对数据文件分析,条数少用insert,数据量大的用sqlldr,这个方案考虑过了,应为要改的东西太多,所以这是第二步,首先我是想在sqlldr语句参数上优化一下,尽量优化到最佳,我知道sqlldr有很多参数,具体怎么用没有涉及到过。请给个方案
yhuib 2009-03-26
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 kostion 的回复:]
引用 4 楼 yhuib 的回复:
才两百条?至于用sqlldr嘛,直接insert就好啦,sqlpldr要做不少准备工作的,数据量少的话效率很低的


这个项目之前不是我做的,虽然每个数据文件,数据量很少,入库服务器是在不停的起sqlldr的,而且时间是不间隔的,在同一时间,有500的sqlldr进程在并发,是不是太多了,导致了sqlldr进程的阻塞。
[/Quote]
500个并发sqlldr处理小文件?还是改改吧,最起码减少并发的数量。小数据量建议还是不要用sqlldr。
又是违规昵称 2009-03-26
  • 打赏
  • 举报
回复
这个值得关注
kostion 2009-03-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 friendjin 的回复:]
你的sqlldr应用的不好,你肯定是一个一个文件入库的,不知道我说的对否
load data
infile 'a1.txt'
infile 'a2.txt'
...
append into t1
...
你可以测试以下
[/Quote]
是一个文件一个文件入的,因为我们数据产生的服务器,产生的数据不是一样的,有15种数据要入到Oracle不同的表中,而产生的数据类型是随机的没有规则,所以只能一个一个的入了
kostion 2009-03-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yhuib 的回复:]
才两百条?至于用sqlldr嘛,直接insert就好啦,sqlpldr要做不少准备工作的,数据量少的话效率很低的
[/Quote]

这个项目之前不是我做的,虽然每个数据文件,数据量很少,入库服务器是在不停的起sqlldr的,而且时间是不间隔的,在同一时间,有500的sqlldr进程在并发,是不是太多了,导致了sqlldr进程的阻塞。
yhuib 2009-03-26
  • 打赏
  • 举报
回复
可以先试试每种数据一个,像5楼说的那样把相同的数据用1个sqlldr处理
yhuib 2009-03-26
  • 打赏
  • 举报
回复
降低sqlldr的并发数量和执行频率,每次尽可能的处理更多的数据。参数优化一般都是针对大数据量的。如果可能的话先试试最少的并发数量能不能完成任务
yhuib 2009-03-26
  • 打赏
  • 举报
回复
以sqlldr的速度来说,每种数据用两三个就够了
friendjin 2009-03-25
  • 打赏
  • 举报
回复
你的sqlldr应用的不好,你肯定是一个一个文件入库的,不知道我说的对否
load data
infile 'a1.txt'
infile 'a2.txt'
...
append into t1
...
你可以测试以下
yhuib 2009-03-25
  • 打赏
  • 举报
回复
才两百条?至于用sqlldr嘛,直接insert就好啦,sqlpldr要做不少准备工作的,数据量少的话效率很低的
kostion 2009-03-25
  • 打赏
  • 举报
回复
我的一个数据文件中只有几条数据,最多也不超过2百条,大多情况下都是不超过10条,但是需要不断的起sqlldr
hugh_9 2009-03-25
  • 打赏
  • 举报
回复
sqlldr速度应该还不错,可能是io的问题。
如果大批量数据的话,通过exp/imp试下。
yhuib 2009-03-25
  • 打赏
  • 举报
回复
怀疑同时进行的导入太多了,有可能数据库的IO是瓶颈
在java代码中调用执行shell脚本,sqlldr导数与使用sqlplus在shell调用执行存储过程。 linux环境中有2个dba的用户:oracle、erm 还有1个web用户:erm 在linux环境中,这三个用户都可以直接在任意目录下执行该shell脚本,可是在java代码中调用shell脚本时,报了如下4个错误: 1、sqlldr: command not found 2、sqlplus: command not found 3、0750: You may need to set ORACLE_HOME to your Oracle software directory 4、Message 2100 not found; No message file for product=RDBMS, facility=ULMessage 2100 not found; No message file for product=RDBMS, facility=UL$ 检查了dba用户和web用户下关于oracle的所有环境变量发现没有问题 (/home/oracle/.profile 与 /home/erm/.profile 环境变量文件为隐藏文件需使用 ls -a 命令查看) 在网上查了一遍以后有如下几种处理办法: 1、没有oracle_home目录的执行权限,无法进入到bin目录,使用chmod 755 $oracle_home更改目录权限;使用chmod 755 $oracle_home/lib更改目录权限;对目录$oracle_home/rdbms/mesg目录赋予相应权限;当需要给非oracle用户配置使用sqlldr时,不单需要配置环境变量,还需要把相关目录的访问权限赋予该用户。【采用此法测试以后还是出现上面的错误】 2、用sh直接执行shell和在java直接执行shell是有区别的,要在shell文件内增加oracle的环境变量即. /home/oracle/.bash_profile 这句话,否则在执行sqlldr会报如下异常: Message 2100 not found; No message file for product=RDBMS...... facility=UL 【采用此法测试以后继续报错,但是这个方法有引导作用,继续往下看】 因为我在linux环境下执行shell脚本时sqlldr命令和sqlplus命令是正常执行的,没有任何问题,但是在java代码中调用脚本时却报错,所有排除了其他原因,只可能是环境变量的问题, 于是我把oracle的所有环境变量直接复制到shell脚本文件中,在java中调用了一下,然后所有问题迎刃而解! 具体代码参看文件内容

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧