Thanks for all the good input.
I have to agree with Wilfried, don’t keep a record on hold. I think that should be a shop standard. Before doing an update, you get the record and check the last-update-date field to see if it has been updated since it was first retrieved. You could get fancier with this if you wish. I just don’t think application programs should produce database errors. Just my humble opinion.
I’m going to do some testing with the USR2072N utility this weekend to see if it causes overhead. I’ll use natrje to submit 100 jobs that all execute USR2072N and see what effect it has on the CPU. With that utility you can’t define a wait period of less than a second, so I’m thinking that when a 3145 error is returned, we’ll do a retry once a second for maybe 5 seconds. That will be a huge improvement over what we do now, which is to do 50,000 retries in about 5 seconds.
And btw Wilfried, there is overhead with WH=ON, and I read in one of the SAG manuals that SAG does not recommend it. I’m not sure exactly what kind of overhead it is, if it stays in the command queue or what.
Steve, that’s an interesting idea, lowering the ISN hold queue. But, the same thing can be accomplished with an adabas review report. I’ve been writing review reports to show programs putting record after record on hold when there will be little or no actual updating.
Actually the worse thing we have is sub programs that read a large number of records, putting them on hold, then never doing an end transaction because it doesn’t find a record it wants to update. Our system was written by people that don’t know natural, and their code was not reviewed, and there have never been any programming standards. One standard they did adhere to was to have on error routines that have if 3145, retry, endif. And, when I got here, the transaction time out parameters were set at 14,400 (4 hours).
Sorry I took so long getting back, I have problems using the forum, and I’m told my account won’t get reactivated until Monday, so I just made a new one.