Choosing a RELEASE option
The RELEASE bind option controls when an application releases locks that it acquires on objects such as partitions, tables, or table spaces that it accesses. It applies only to partition, table, and table space locks.
About this task
The RELEASE option applies only to static SQL statements, which are bound before your program runs. Dynamic SQL statements acquire locks only when they access objects and release the locks at the next commit point. However, locks for dynamic statements might be held past commit. When the KEEPDYNAMIC(YES) bind option is specified and the value of the CACHEDYN subsystem parameter is YES, the RELEASE(DEALLOCATE) bind option is honored for dynamic SELECT, INSERT, UPDATE, and DELETE statements.
The RELEASE option does not apply to page, row, LOB, or XML locks.
Procedure
- RELEASE(DEALLOCATE)
- This option results in the most efficient use of processing time in most cases. The locks are released only when the application ends and the object is deallocated.
- RELEASE(COMMIT)
- This option provides the greatest concurrency. However, if the
application commits frequently, RELEASE(COMMIT) requires more processing
time. Under this option, locks are released at different times, depending
on the attachment facility:
- TSO, Batch, and CAF
An SQL COMMIT or ROLLBACK statement is issued, or your application process ends.
- IMS™
- A CHKP or SYNC call (for single-mode transactions), a GU call to the I/O PCB, or a ROLL or ROLB call is completed
- CICS®
- A SYNCPOINT command is issued.
Cursors that are defined under the WITH HOLD option are an exception. Locks that are necessary to maintain the cursor position are held past the commit point.
Example
Consider an application that selects employee names and telephone numbers from a table. Assume that employees can update their own telephone numbers, and they can run several searches in succession. The application is bound with the RELEASE(DEALLOCATE) bind option because most uses of this application do not update and do not commit. For those uses, little difference exists between RELEASE(COMMIT) and RELEASE(DEALLOCATE).
However, administrators might update several phone numbers in one session with the application, and the application commits after each update. In that case, RELEASE(COMMIT) releases a lock that DB2® must acquire again immediately. RELEASE(DEALLOCATE) holds the lock until the application ends, avoiding the processing that is required to release and acquire the lock several times.