SUMMARY: Performance Issue with C++/V4.0F/Oracle 8.0.6

From: ^IT_MPG_UNIX_ADMIN <^IT__MPG__UNIX__ADMIN_at_ccmail.allegiance.net>
Date: Thu, 04 Jan 2001 11:00:18 -0600

With the help of Compaq Engineering support we were able to gradually improve
the performance of the Oracle 8.0.6 C++ application until the run time fell
within acceptable limits. Instead of running seven times as long, we found that
the the application would run from 1.2 to 1.5 times as long compared to the
7.3.4 V4.0E performance. Here is the list of changes:

1) Upgraded to Tru-64 UNIX 4.0F with patch kit 4. Patch kit 4 contains changes
designed to improve the performance of highly contended applications running in
an EV6 SMP environment.

2) Inserted C++ malloc tuning code snippet into program:

#include <limits.h>
#include <sys/types.h>
unsigned long __noshrink = 1;
size_t __minshrink = 65536;
double __minshrinkfactor = 0.001;
size_t __mingrow = 65536;
double __mingrowfactor = 0.1;
unsigned long __madvisor = 0;
unsigned long __small_buff = 0;
int __fast_free_max = INT_MAX;
unsigned long __sbrk_override = 0;
unsigned long __taso_mode = 0;
int __max_cache = 27;
int __first_fit = 2;
int __delayed_free = 1;

This code increased the application performance.

3) Upgraded the Compaq C++ Compiler to version 6.2.1 from version 6.11. The
C++ program performed better after compilation with 6.2.1.

4) Linked the C++ program with -laio_raw which caused the executable to be
threadsafe. This change significantly increased the performance of the program
by not executing the memory management code needed for threaded applications.


Vinod, I am not sure if any of the steps will translate into the HP environment
except possibly step 4). However, I think that the Rogue Wave tools require
multi-threading so linking the program with -laio_raw would fail.

Marc Brandon, Alay Shah
Allegiance Healthcare
     
     
     ----ORIGINAL MESSAGE----
     
     
     We are looking for some advice in resolving a recent performance
     problem with an Oracle C++ application. The app reads Oracle table
     data into memory and then uses the data to update records in a flat
     file.

     Until recently the app ran on an 8400 running Digital UNIX 4.0E, and
     connected to a server machine running Oracle 7.3.4. Oracle was
     upgraded to 8.0.6 on the server machine. A week later, the 8400 was
     upgraded to DU 4.0F.

     The application programmers notified us of a sevenfold increase in the
     app's elapsed clock time after the Oracle and UNIX upgrades. The
     performance degradation was eventually determined to have started after
     the upgrade to Oracle 8.0.6 but before the UNIX 4.0F upgrade.

     After analysis we determined that the problem was related to linking
     the program with Oracle 8.0.6 libs as opposed to Oracle 7.3.4 libs. If
     the program was linked with Oracle 7.3.4 libs then the elapsed clock
     time was normal. If the program was linked with Oracle 8.0.6 libs then
     the elapsed clock time was about 7 times normal.

     It appears that the performance degradation occurs because Oracle
     8.0.6 client turns on Asynchronous I/O. Asynch I/O links in
     'libaio.so' which causes the program to be run as a multi-threaded
     program, regardless of whether the multi-threading is coded or not.
     This causes a different instruction path to be used for memory
     management. Oracle 7.3.4 client does not use Asynch I/O.

     The programmers added some Compaq recommended malloc tuning variables
     to the C++ application which reduced the elapsed run time by a third.
     We still must find a way to reduce the elapsed run time so it equals
     the pre-8.0.6 run time. Any ideas are appreciated.

     Alay Shah
     Allegiance Healthcare
     1400 Waukegan Rd.
     McGaw Park, IL 60085
     Ph: 847.578.2584
     Fax:847.578.5586
     E:mail:unixadmin_at_allegiance.net
Received on Thu Jan 04 2001 - 17:05:01 NZDT

This archive was generated by hypermail 2.4.0 : Wed Nov 08 2023 - 11:53:41 NZDT