OBCP题目: 普通 SELECT 查询会隐式地加一个 RS 表锁。

判断题目: 普通 SELECT 查询会隐式地加一个 RS 表锁。

这个判断是错误的。

在 OceanBase 中,普通的 SELECT 查询(快照读)不会加任何锁,更不会隐式地加 RS(Row Share)表锁。具体原因如下:

  1. 基于 MVCC 的无锁读取:OceanBase 采用了多版本并发控制(MVCC)机制。当执行普通的 SELECT 语句时,数据库会读取数据的一个历史快照版本,而不是直接去锁定当前的最新数据。
  2. 读写不互斥:由于普通 SELECT 完全不加锁,因此它既不会阻塞其他事务的写操作,也不会被写操作所阻塞,从而极大提升了高并发场景下的性能。
  3. 对比其他类型的查询:只有显式的加锁读(如 SELECT ... FOR UPDATELOCK IN SHARE MODE)才会被视为“当前读”,此时才会像写操作一样对目标行加排他锁或共享锁。

综上所述,普通 SELECT 查询是不加锁的,题目中的说法是错误的。

这个说法是错误的。

在 OceanBase 中,普通的 SELECT 查询属于快照读 ,利用 MVCC(多版本并发控制) 机制直接读取数据的快照版本,不会对表加任何锁,因此也不会隐式地添加 RS 表锁。

这个判断是错误 的。

1 个赞