更改事务隔离级别

默认情况下,Vertica 对所有会话使用 READ COMMITTED 隔离级别。您可以更改数据库或给定会话的默认隔离级别。

事务将保留其隔离级别直至其完成,即使在事务处理期间会话的隔离级别发生更改也是如此。Vertica 内部进程(例如 Tuple Mover刷新操作)以及 DDL 操作始终以 SERIALIZABLE 隔离级别运行以确保一致性。

数据库隔离级别

配置参数 TransactionIsolationLevel 将指定数据库隔离级别,并用作所有会话的默认值。使用 ALTER DATABASE 更改默认隔离级别。例如:

=> ALTER DATABASE DEFAULT SET TransactionIsolationLevel = 'SERIALIZABLE';
ALTER DATABASE
=> ALTER DATABASE DEFAULT SET TransactionIsolationLevel = 'READ COMMITTED';
ALTER DATABASE

数据库隔离级别的更改仅适用于将来的会话。现有会话及其事务会继续使用原始隔离级别。

使用 SHOW CURRENT 查看数据库隔离级别:

=> SHOW CURRENT TransactionIsolationLevel;
  level   |           name            |    setting
----------+---------------------------+----------------
 DATABASE | TransactionIsolationLevel | READ COMMITTED
(1 row)

会话隔离级别

SET SESSION CHARACTERISTICS AS TRANSACTION 更改特定会话的隔离级别。例如:

=> SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SET

使用 SHOW 查看当前会话的隔离级别:

=> SHOW TRANSACTION_ISOLATION;

另请参阅

事务