更新时间:2024-05-17 GMT+08:00
分享

常规锁设计

分区表通过表锁+分区锁两重设计,在表和分区上分别施加8个不同级别的常规锁,来保证DQL、DML、DDL并发过程中的合理行为控制。下表给出了不同级别锁的互斥行为,标记为√的两种常规锁互不阻塞,可以并行。

表1 常规锁行为

-

ACCESS_SHARE

ROW_SHARE

ROW_EXCLUSIVE

SHARE_UPDATE_EXCLUSIVE

SHARE

SHARE_ROW_EXCLUSIVE

EXCLUSIVE

ACCESS_EXCLUSIVE

ACCESS_SHARE

×

ROW_SHARE

×

×

ROW_EXCLUSIVE

×

×

×

×

SHARE_UPDATE_EXCLUSIVE

×

×

×

×

×

SHARE

×

×

×

×

×

SHARE_ROW_EXCLUSIVE

×

×

×

×

×

×

EXCLUSIVE

×

×

×

×

×

×

×

ACCESS_EXCLUSIVE

×

×

×

×

×

×

×

×

分区表的不同业务最终都是作用于目标分区上,数据库会给分区表和目标分区施加不同级别的表锁+分区锁,来控制并发行为。下表给出了不同业务的锁粒度控制。其中数字1~8代表上表给出的8种级别常规锁。

表2 分区表业务锁粒度

业务模型

一级分区表锁级别(表锁+分区锁)

二级分区表锁级别(表锁+一级分区锁+二级分区锁)

SELECT

1-1

1-1-1

SELECT FOR UPDATE

2-2

2-2-2

DML业务,包括INSERT、UPDATE、DELETE、UPSERT、MERGE INTO、COPY

3-3

3-3-3

分区DDL,包括ADD、DROP、EXCHANGE、TRUNCATE、SPLIT、MERGE、MOVE、RENAME

4-8

4-8-8(作用二级分区表的一级分区)

4-4-8 (作用二级分区表的二级分区)

CREATE INDEX、REBUILD INDEX

5-5

5-5-5

REBUILD INDEX PARTITION

1-5

1-1-5

其他分区表DDL

8-8

8-8-8

相关文档