2
votes

I am using sqlldr to load data into Oracle RAC (on Linux), and I am trying to improve the performance of my data loading. I am using 'Direct Path' and I've set 'parallel=true' for the sqlldr. Moreover, since my servers are multi-core, multithreading is set to be true by default.

Now, I am thinking about splitting the input file, on each server, into several chunks, and load them in parallel. I learned that one can list multiple INFILE files in the control file for sqlldr. My question is:

  • if I list several INFILE files in a single control file, and launch one sqlldr instance, does it process the files in parallel, or goes through them sequentially ?

Because another option for me is to launch, in parallel, as many sqlldr instances as the number of chunks that I create on each server, while each sqlldr instance has its own control file that lists only one INFILE file. But this option only makes sense, if sqlldr processes multiple INFILE files sequentially.

1
I guess I need to launch several sqlldr sessions in parallel, each with its own control file. Check: docs.oracle.com/database/121/SUTIL/ldr_modes.htm#SUTIL1344 - Pouria

1 Answers

1
votes

Since you are using "direct load" you cannot parallelize it.

Direct load "locks" the high water mark of the table / partition, and puts the data there... therefore - another process cannot lock it in parallel. A parallel process would have to wait for the current load to finish. (I assume you don't control the partitions you load into.. if you can control it - you can get a better grain-fined tuning for it.. but usually the data to load is not divided in files as it will be in partitions, if you use partitions at all...)

If you'll "give up that", the parallel would be managed "automagically" for you by the parameters you give..

BUT - I would recommend you to stay with the "direct load" since it is probably much much faster than any other method of loading that exist (although its lock is very "big" for it).