更新时间:2024-06-07 GMT+08:00
自动扩展分区的创建策略
分区自动扩展是一个自动提交的过程,当DML插入的数据无法匹配到已有的任意分区或创建分类索引指定的分区不存在时,会触发自治事务执行分区自动扩展。这一过程会对分区表施加短暂的锁定,与其他分区DDL命令相互阻塞。阻塞周期极为短暂,对系统运行或用户操作基本无影响。
分区自动扩展的行为表现如下:
- 通过DML业务自动扩展的分区不支持回滚,即当前事务回滚后,新建的分区依然存在。可以通过查询系统表PG_PARTITION查看新建的分区。
- 通过创建分类索引触发自动扩展分区时,若创建索引事务异常回滚,新建的分区可能存在(异常回滚点在触发自动扩展分区之后),也可能不存在(异常回滚点在触发自动扩展分区之前)。可以通过查询系统表PG_PARTITION查看新建的分区。
- 分区自动扩展与常规分区DQL/DML业务互不阻塞,支持这两类业务的并发。
- 分区自动扩展过程会短暂施加锁定,系统运行或用户操作基本无影响,支持多个线程因DML/分类索引业务同时触发分区自动扩展场景的并发。
- 分区自动扩展过程与分区DDL互斥,若有其他线程执行分区DDL且未提交,如果当前线程DML/分类索引业务触发分区自动扩展,则会被阻塞;但若其他线程执行DML/分类索引业务触发分区自动扩展且未提交,则不会阻塞当前线程的分区DDL业务。
自动扩展分区可以通过以下两种方式创建:
- DML业务导致的新增数据,无法匹配到任意已有分区,此时会优先基于规则创建一个新的分区,再向新分区插入对应数据。
- 以PARTITION/SUBPARTITION FOR partition_value的方式创建分类索引,若指定的分区不存在,此时优先基于规则创建一个新的分区,再在新分区上创建分类索引。
父主题: 分区自动扩展