返回首页

gbase数据、南大通用产品文档:GBase8cSET TRANSACTION

更新日期:2024年09月11日

功能描述
为事务设置特性。事务特性包括事务隔离级别、事务访问模式(读/写或者只读)。可以设
置当前事务的特性(LOCAL),也可以设置会话的默认事务特性(SESSION)。
注意事项

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
1259
设置当前事务特性需要在事务中执行(即执行SET TRANSACTION 之前需要执行
START TRANSACTION 或者BEGIN),否则设置不生效。
语法格式
设置事务的隔离级别、读写模式。
{SET [ LOCAL ] TRANSACTION|SET SESSION CHARACTERISTICS AS
TRANSACTION}
{ ISOLATION LEVEL { READ COMMITTED | READ UNCOMMITTED }
| { READ WRITE | READ ONLY | SERIALIZABLE | REPEATABLE READ }
} [, ...]
SET TRANSACTION SNAPSHOT snapshot_id;
参数说明

LOCAL
声明该命令只在当前事务中有效。

SESSION
声明这个命令只对当前会话起作用。
取值范围:字符串,要符合标识符的命名规范。

ISOLATION_LEVEL
指定事务隔离级别,
该参数决定当一个事务中存在其他并发运行事务时能够看到什么数
据。
说明:在事务中第一个数据修改语句(SELECT、INSERT、DELETE、UPDATE、
FETCH、COPY)执行之后,当前事务的隔离级别就不能再次设置。
取值范围:
READ COMMITTED:
读已提交隔离级别,
只能读到已经提交的数据,
而不会读到未提
交的数据。这是缺省值。

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
1260
REPEATABLE READ:可重复读隔离级别,仅仅能看到事务开始之前提交的数据,不
能看到未提交的数据,以及在事务执行期间由其它并发事务提交的修改。
SERIALIZABLE:GBase 8c 目前功能上不支持此隔离级别,等价于REPEATABLE
READ。

READ WRITE | READ ONLY
指定事务访问模式(读/写或者只读)。
示例
--开启一个事务,设置事务的隔离级别为READ COMMITTED,访问模式为READ
ONLY。
gbase=#START TRANSACTION;
gbase=#SET LOCAL TRANSACTION ISOLATION LEVEL READ COMMITTED READ
ONLY;
gbase=#COMMIT;

FOR AS 循环的语法请参见图17-10。
图17-10 FOR_AS_loop::=

使用 OPTCOMPIND 来指定信息,帮助优化器选择一个对您的应用适当的查询计划。
提示: 您可认为此变量名出自“OPTimizer COMPare (the cost of using) INDexes (with
other methods)。”
onconfig.std 值
OPTCOMPIND 2

0 = 当表的每一排序的对存在适当的索引时,用户器选择索引扫描(嵌套循环联接),不
计成本,不选择表扫描(散列联接)。
1 = 如果隔离级别不是 Repeatable Read,则优化器根据成本来确定执行路径。否则,优
化器选择索引扫描(效果与值 0 相同)。此设置是优化性能的推荐设置。

GBase 8s 管理员参考
南大通用数据技术股份有限公司 - 115 -

2 = 优化器根据成本来确定任何隔离级别的执行路径。索引扫描不优先于表扫描;优化器
纯粹地根据成本做决定。如果未设置变量,则该值是缺省值。
生效
编辑 onconfig 文件并重启数据库服务器之后。
当您通过运行 onmode -wf 命令在 onconfig 文件中动态地重置该值时。
当您通过运行 onmode -wm 命令重置内存中的该值时。
用法
由于散列联接的本质,一个隔离模式设置为 Repeatable
Read 的应用可能临时地锁定表中
的所有记录,这些表参与表的每一排序集的联接(即使那些记录不符合联接条件)。这种
情况导致联接中发生较高的争用。相反地,嵌套循环联接锁定较少记录,但当数据库服务
器检索大量行时性能较差。因此,两种联接方式都各有利弊。客户端应用也可影响优化器
对联接方式的选择。