ODBC UARS transactions consume a lot of CPU time

Knowledge Base: Other

Review this document to determine if your site can benefit from Problem List Entry (PLE) 18287099.
The PLE is located at: https://www.support.unisys.com. (You will need a userid and password to access this site.)

The following is from PLE 18287099, as of 4/4/2006:

Symptoms:
After moving UniAccess up to level 9R1, retrievals begin to take more time to execute.

Technical Explanation:
For ODBC, RSA does not convert data retrieved by RDMS: it is simply block-transfered from the RDMS data packet into the buffer passed from the ODBC program. To calculate the amount of data to transfer, RSA used the size of the caller-supplied buffer. UniAccess 9R1 has a 28000 word buffer; it was 9000 in earlier levels. So, even if only a few words of data were actually retrieved, RSA copied thousands of words. This situation did not become noticeable until the amount of data transferred was increased three-fold.

Workaround Description:

The following code corrects the problem described in this PLE. Note that although it has passed the unit tests for this problem, it has not yet been subjected to our more rigorous regression tests. Nevertheless, we are confident that in addition to solving (or, at least, alleviating) the problem, it will not cause any additional problems.

For level 13R1A the workaround is:

*AIS$CLIB
-16,16
Since size information is required on the RSA call, an array
-20

FYI: JDBC passes the value true for the fourth parameter
(data_conversion).
ODBC passes false.
*RDMS-CHGDATA
-2250,2250
1,; . 10019
*RSAS-PERFORM
-1756,1756
copyblock(data_bfr_ptr, ucs_plist.item_ptr(4),
((record_desc_area.record_lgth+3)//4) * rdmca.no_records) ;

For level 14R2, the workaround is:

*AIS$CLIB

-16,16

Since size information is required on the RSA call, an array

-20

FYI: JDBC passes the value true for the fourth parameter
(data_conversion).
ODBC passes false.

*RDMS-CHGDATA

-2252,2252

1,; . 10021

*RSAS-PERFORM

-1760,1760

copyblock(data_bfr_ptr, ucs_plist.item_ptr(4),

((record_desc_area.record_lgth+3)//4) * rdmca.no_records) ;

Resolution Details: RSA will use the number of rows actually retrieved to calculate the amount of data to transfer.

RDMS 13R1:   FIX IN TESTING
RDMS 13R1A: FIX IN TESTING
RDMS 14R1:   FIX IN TESTING
RDMS 14R2:   FIX IN TESTING

Knowledge Base: Other