
# 常规锁设计
分区表通过表锁+分区锁两重设计，在表和分区上分别施加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                                                                        |
   
