HP 3000 Manuals

Understanding Timeouts [ ALLBASE/SQL Release F.0 Application Programming Bulletin for MPE/iX ] MPE/iX 5.0 Documentation


ALLBASE/SQL Release F.0 Application Programming Bulletin for MPE/iX

Understanding Timeouts 

When an application requests a database resource that is unavailable, it
is placed on a wait queue.  Database resources that cause applications to
be placed on a wait queue include the following:

Locks             The application attempts to lock a database object that
                  has already been locked in a conflicting mode.

Transaction       The maximum number of concurrent transactions has been
Slots             reached and the application attempts to begin a
                  transaction.  Note that ALLBASE/SQL creates an
                  implicit, brief transaction when the CONNECT statement
                  is issued.

If the amount of time the application waits is longer than the timeout
value, an error occurs and the transaction is rolled back.  The
application must check the sqlcode field of the sqlca for timeout error
2825.

The strategy for handling timeout errors depends on the specific needs of
your application and on your business procedures.  When encountering a
timeout error, you may want to inform the user that a timeout has
occurred and then halt execution of the program.  Or, you may want to
prompt the user to try again, in case the database resource is now
available.

A timeout value can be changed with the following statements:

   *   SET USER TIMEOUT
   *   START DBE
   *   START DBE NEW
   *   START DBE NEWLOG
   *   SQLUtil ALTDBE

The SQLUtil SHOWDBE command displays the timeout values that have been
set in the DBECon file.  (Note that NONE is the default when no timeout
value is specified at DBEnvironment creation time.)  Remember, however,
that DBECon file values can be temporarily overridden with a START DBE or
START DBE NEWLOG statement.  In such a case, the DBEnvironment startup
parameters currently in effect are not reflected by issuing a SHOWDBE
command.

Locking and transaction management strategies should be considered when
setting timeout values.  Refer to the following section "Using Timeouts
to Tune Performance" and to the "Programming for Performance" chapter in
the ALLBASE/SQL application programming guides for more information.

The following example illustrates how you can check for the occurrence of
a timeout error:

     :

     CONNECT TO '../sampledb/PartsDBE'

     Check the sqlcode field of the sqlca. 

     If sqlcode equals -2825, the CONNECT has timed out because the maximum 
     number of transaction slots has been exceeded.  Although the application has 
     not explicitly begun a transaction, ALLBASE/SQL creates an implicit, short-lived 
     transaction when a CONNECT is issued.  Since the application has not yet  
     executed the SET USER TIMEOUT statement, the timeout value in the DBECon file 
     is still in effect. 

     To prevent the application from waiting at all for a database resource, 
     such as the lock needed for an update, set the timeout value to zero.  The 
     timeout values of other applications are unaffected. 

     Timeout = 0

     SET USER TIMEOUT :Timeout

     BEGIN WORK

     Check the sqlcode field of the sqlca. 

     If sqlcode equals -2825, the maximum number of transaction slots has been exceeded. 

     UPDATE PurchDB.Parts
        SET SalesPrice = SalesPrice * 1.25
      WHERE SalesPrice > 500.00

     Check the sqlcode field of the sqlca. 

     If sqlcode equals -2825, another transaction has placed an incompatible lock 
     on a database object which your transaction wishes to lock for update. 

     COMMIT WORK

     :



MPE/iX 5.0 Documentation