I have a job running for 86 minutes to write total of 3 million records(into four files).
Can i speeden the IO operation?I read somewhere instead writing to file after each process .its efficient to move to a temp ws array then write at a strech. Is it sounding meaningful?
I tried doing so didn't notice any difference.
Someone can help me to find a better soultion .
Joined: 06 Jun 2008 Posts: 8214 Location: Dubuque, Iowa, USA
Programs are either
- CPU-bound, meaning they're using all the CPU time they get and need more to continue, or
- I/O-bound, meaning they're waiting for I/O to be complete before they can continue.
The relevance is that if your program is CPU-bound, you can reduce the I/O time to zero and it would not have any impact on how long your program runs. So unless you have STROBE, APA, or another tool that will let you know if your program is CPU-bound or I/O-bound, you could be attempting to do the impossible.
If the job is not CPU-bound, things you can do to help reduce elapsed time include:
- adding buffers (at least a cylinder's worth) via DCB=BUFNO= or AMP= JCL statements to both input and output files
- running when little else is going on in the system
- running in a high priority batch initiator
- verify your files are not on high-traffic disk channels or packs
- don't write data if you don't have to -- the fastest I/O is the one you don't do
Considering you're reading 3 million to write 3 million, you're doing 6 million record processing in less than 1.5 hours, so the system isn't doing badly at all. One of our daily processes (that does not use a lot of CPU time) took 131 minutes yesterday to write 1,163,000 records -- but it does run when our system is busiest.