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的效率。

解决方案 »

  1.   

    sqlldr速度应该还不错,可能是io的问题。
    如果大批量数据的话,通过exp/imp试下。
      

  2.   

    我的一个数据文件中只有几条数据,最多也不超过2百条,大多情况下都是不超过10条,但是需要不断的起sqlldr
      

  3.   

    才两百条?至于用sqlldr嘛,直接insert就好啦,sqlpldr要做不少准备工作的,数据量少的话效率很低的
      

  4.   

    你的sqlldr应用的不好,你肯定是一个一个文件入库的,不知道我说的对否
    load data
    infile 'a1.txt'
    infile 'a2.txt'
    ...
    append into t1
    ...
    你可以测试以下
      

  5.   


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

  6.   

    是一个文件一个文件入的,因为我们数据产生的服务器,产生的数据不是一样的,有15种数据要入到Oracle不同的表中,而产生的数据类型是随机的没有规则,所以只能一个一个的入了
      

  7.   

    500个并发sqlldr处理小文件?还是改改吧,最起码减少并发的数量。小数据量建议还是不要用sqlldr。
      

  8.   


    入库之前对数据文件分析,条数少用insert,数据量大的用sqlldr,这个方案考虑过了,应为要改的东西太多,所以这是第二步,首先我是想在sqlldr语句参数上优化一下,尽量优化到最佳,我知道sqlldr有很多参数,具体怎么用没有涉及到过。请给个方案
      

  9.   

    以sqlldr的速度来说,每种数据用两三个就够了
      

  10.   

    降低sqlldr的并发数量和执行频率,每次尽可能的处理更多的数据。参数优化一般都是针对大数据量的。如果可能的话先试试最少的并发数量能不能完成任务
      

  11.   

    可以先试试每种数据一个,像5楼说的那样把相同的数据用1个sqlldr处理