FORCE_TRANSACTION_DISALLOW_COMMIT Command
The FORCE_TRANSACTION_DISALLOW_COMMIT command marks a transaction as not allowed to commit. By doing so, overlapping transactions that commit do not have to be preserved for conflict resolution and do not accumulate in committed_transaction memory. The transaction is otherwise unaffected; that is, if a query is running it will continue to run and use resources.
This command can be used to:
• Reduce committed transactions memory use
• Remove a session with uncommitted transactions when it cannot be removed otherwise (with IPM or through its application). In such situations, marking the transaction as not allowed to commit prevents committed transaction memory accumulating indefinitely, so that the server can continue to operate. Because such a situation is an error state, however, we advise that you schedule a server restart for a convenient time.
Note: This command should be used in emergency situations only. You should first try to remove the session with the hanging transaction. Manually removing sessions, interrupting transactions, and preventing a transaction from committing changes are emergency solutions. It is preferable to avoid this situation by transaction control in the application and query time-outs.
This command has the following format:
CALL X100 (FORCE_TRANSACTION_DISALLOW_COMMIT '''x100_tx_id''')
where x100_tx_id is the transaction ID (obtained from the vwinfo ‑o output).
If the transaction was a write transaction and attempts to commit, it will receive error: "E_QE0087 Error committing a transaction." The vectorwise.log will show:
UPDATE_MGR:Attempting to commit transaction TXID x100_tx_id that was forcibly disallowed to commit.
X100SERVER:handle_request: Error committing transaction, aborted!
If the transaction did not make any changes, it will commit without an error because it does not require conflict resolution.
Last modified date: 06/28/2024