
# 自动扩展分区的创建策略
分区自动扩展是一个自动提交的过程，当DML插入的数据无法匹配到已有的任意分区或创建分类索引指定的分区不存在时，会触发自治事务执行分区自动扩展。这一过程会对分区表施加短暂的锁定，与其他分区DDL命令相互阻塞。阻塞周期极为短暂，对系统运行或用户操作基本无影响。自动扩展分区原理如[图1]所示。
图1自动扩展分区原理   
![](https://support.huaweicloud.com/centralized-devg-v10-gaussdb/figure/zh-cn_image_0000002590364488.png "点击放大")
分区自动扩展的行为表现如下：
- 通过DML业务自动扩展的分区不支持回滚，即当前事务回滚后，新建的分区依然存在。可以通过查询系统表PG_PARTITION查看新建的分区。
- 通过创建分类索引触发自动扩展分区时，若创建索引事务异常回滚，新建的分区可能存在（异常回滚点在触发自动扩展分区之后），也可能不存在（异常回滚点在触发自动扩展分区之前）。可以通过查询系统表PG_PARTITION查看新建的分区。
- 分区自动扩展与常规分区DQL/DML业务互不阻塞，支持这两类业务的并发。
- 分区自动扩展过程会短暂施加锁定，系统运行或用户操作基本无影响，支持多个线程因DML/分类索引业务同时触发分区自动扩展场景的并发。
- 分区自动扩展过程与分区DDL互斥，若有其他线程执行分区DDL且未提交，如果当前线程DML/分类索引业务触发分区自动扩展，则会被阻塞；但若其他线程执行DML/分类索引业务触发分区自动扩展且未提交，则不会阻塞当前线程的分区DDL业务。
![](https://support.huaweicloud.com/centralized-devg-v10-gaussdb/public_sys-resources/notice_3.0-zh-cn.png)
部分场景下分区自动扩展依然会在同事务内执行，即采用混合事务的方式，此时不支持逻辑解码。涉及场景如下：
- 自治事务最大连接数max_concurrent_autonomous_transactions设置为0。
- 分区表/父分区本身由当前事务创建产生。
- 在参数enable_partition_autoextend_retry设置为off的情况下，若触发新增分区时的自治事务总连接数超过自治事务最大连接数max_concurrent_autonomous_transactions，或同事务内有混合DDL操作导致自治事务触发死锁，则新增分区抛出异常；在参数enable_partition_autoextend_retry设置为on的情况下，则会重试一次混合事务新增分区模式。
 
非透明多写特性下，自动扩展分区可以通过以下方式创建：
- DML业务导致的新增数据，无法匹配到任意已有分区，此时会优先基于规则创建一个新的分区，再向新分区插入对应数据。
 
