Queries to system objects in SNAPSHOT_MODE may cause transaction conflicts

Details

Detail name Value
Changelog Number 16148
Type Bug
Status Resolved
Affected Versions Exasol 7.1.0, Exasol 8.0.0
Fix Versions Exasol 8.22.0
Resolution Date 2023-08-29

Description

Queries to system objects (e.g., system tables like "$ODBCJDBC".ALL_TABLES) take locks and thus can cause transaction conflicts even when SNAPSHOT_MODE='SYSTEM TABLES' is set or within queries that use{{/snapshot execution/}}. This happens if the Exasol compiler internally decides to materializes subqueries.

Preparation

create schema Test;
CREATE OR REPLACE TABLE Test.T1(a int);

Example

-- It is necessary to deactivate autocommit for this example:
alter session set snapshot_mode = 'SYSTEM TABLES';
commit;
select * from "$ODBCJDBC".ALL_TABLES;
-- Expected: 0
select count(*) from "$EXA_OBJECT_LOCKS" where OBJECT_NAME in ('T1');

Workaround

There is no workaround.

Fix

Materialized subqueries that only use system objects from schema SYS no longer acquire locks if snapshot_mode = 'SYSTEM TABLES' is set or if the query uses /snapshot execution/.