USELASTCOMMITTED 环境选项

当两个或多个会话尝试访问其锁定颗粒度为行级锁定的表中的相同行时,通过降低锁定冲突的风险,USELASTCOMMITTED 环境选项可提高使用 Committed Read、Dirty Read、Read Committed 或 Read Uncommitted 隔离级别的会话中的并发能力。

在更改数据值时,SET ENVIRONMENT USELASTCOMMITTED 语句可指定遇到其他会话持有的排他锁的查询和其他操作是否应使用数据的最近提交的版本,而不是等待锁被释放。

此语句可在当期会话期间覆盖 USELASTCOMMITTED 配置参数。您可使用 SET ISOLATION 语句来覆盖 USELASTCOMMITTED 会话环境设置。

USELASTCOMMITTED 选项可有四个值的任意一个:
例如,下列语句指定 Committed Read 隔离模式,并将显式的或缺省的 USELASTCOMMITTED 配置参数设置替换为一设置,在并发读者持有排他锁的行上,该设置读取数据的最近提交的版本:
SET ISOLATION COMMITTED READ;
        SET ENVIRONMENT USELASTCOMMITTED 'ALL';
在会话期间,任何 SPL 例程都可使用这些语句来指定 Committed Read Last Committed 事务隔离级别。在读取行的操作期间,当遇到排他锁时,这些语句使得读取数据的 SQL 操作能够使用最后提交的版本。当另一会话正尝试修改相同的行时,这可避免死锁状况或其他锁定错误。它不会减少与正在写表的其他会话,或与在用户表上或在系统目录表上持有隐式的或显式的锁的并发 DDL 事务,之间发生锁定冲突的风险。
例如,在 PUBLIC.sysdbopenuser.sysdbopen 过程内的下列语句指定在连接时刻的 Committed Read 隔离模式,并将显式的或缺省的 USELASTCOMMITTED 配置参数设置替代为一设置,在并发读者在其上持有排他锁的表中。该设置读取数据的最近提交的版本。:
SET ISOLATION COMMITTED READ;
        SET ENVIRONMENT USELASTCOMMITTED 'ALL';
除了 sysdbopen( ) 之外,任何 SPL 例程都可在会话期间,使用这些语句来指定 Committed Read Last Committed 事务隔离级别。在读取表的操作期间,当遇到排他锁时,这些语句使得读取数据的 SQL 操作能够使用最后提交的版本。当另一会话正尝试修改同一行或表时,这可避免死锁状况或其他锁定错误。它不会降低与正在写表的其他会话,或与对用户表或对系统目录表持有隐式的或显式的锁的并发 DDL 事务,之间发生锁定冲突的风险。

在跨服务器分布式查询中,如果发出该查询的会话的隔离级别有 LAST COMMITTED 隔离级别选项在生效,但一个或多个参与的数据库不支持此 LAST COMMITTED 特性,则整个会话符合该会话的 Committed Read 或 Dirty Read 隔离级别,该会话发出了事务,未启用 LAST COMMITTED 选项。

在启用 USELASTCOMMITTED 时,可防止事务从被另一事务锁定的表读取最近提交的数据。要获取关于这方面的信息,请参阅 Committed Read 的 LAST COMMITTED 选项

要获取更多关于 USELASTCOMMITTED 配置参数的信息,请参阅您的 GBase 8s 管理员参考手册