OBCP V4.0每日一题
问题
关于 OceanBase 数据库中只读事务的说法,正确的是?
A. 即使事务中都是 READ ONLY 查询,如果没有显式指定事务的只读属性,OceanBase 不会将这个事务当做只读事务
B. 只读事务中不允许执行数据更新操作,但可以执行 SELECT FOR UPDATE
C. OceanBase 会为所有事务创建事务上下文,包括只读事务
D. 对只读事务执行 COMMIT 或 ROLLBACK 操作时,OceanBase 不会执行事务提交或回滚的操作
答案
D. 对只读事务执行 COMMIT 或 ROLLBACK 操作时,OceanBase 不会执行事务提交或回滚的操作
Tips
- 只读事务由于没有修改任何数据,不需要持久化变更,OceanBase 对其进行了优化:执行 COMMIT 或 ROLLBACK 时,系统不会真正执行提交或回滚操作,从而减少日志写入和资源消耗 。
- 选项 A 是错误的——即使没有显式指定只读属性,只要事务中只包含查询语句,OceanBase 也会自动将其识别为只读事务并进行优化 。
- SELECT FOR UPDATE 属于锁定读,本质是写操作,不能在只读事务中执行 。
- 选项 C 是干扰项——OceanBase 确实会为只读事务创建事务上下文,但这并不影响 COMMIT/ROLLBACK 时跳过实际操作的特性。
延伸思考
理解只读事务的优化机制,有助于在高并发查询场景下合理设计应用事务边界。对于纯查询业务,可以主动声明只读事务,让数据库获得更好的性能表现。同时需要注意,在只读事务中不要混用 SELECT FOR UPDATE 等锁定操作,否则会引发错误。