判断题目: 普通 SELECT 查询会隐式地加一个 RS 表锁。
这个判断是错误的。
在 OceanBase 中,普通的 SELECT 查询(快照读)不会加任何锁,更不会隐式地加 RS(Row Share)表锁。具体原因如下:
-
基于 MVCC 的无锁读取:OceanBase 采用了多版本并发控制(MVCC)机制。当执行普通的
SELECT语句时,数据库会读取数据的一个历史快照版本,而不是直接去锁定当前的最新数据。 -
读写不互斥:由于普通
SELECT完全不加锁,因此它既不会阻塞其他事务的写操作,也不会被写操作所阻塞,从而极大提升了高并发场景下的性能。 -
对比其他类型的查询:只有显式的加锁读(如
SELECT ... FOR UPDATE或LOCK IN SHARE MODE)才会被视为“当前读”,此时才会像写操作一样对目标行加排他锁或共享锁。
综上所述,普通 SELECT 查询是不加锁的,题目中的说法是错误的。
这个说法是错误的。
在 OceanBase 中,普通的 SELECT 查询属于快照读 ,利用 MVCC(多版本并发控制) 机制直接读取数据的快照版本,不会对表加任何锁,因此也不会隐式地添加 RS 表锁。
这个判断是错误 的。
1 个赞