达梦数据库DPC分布式数据库分区表的使用和规则。
摘要
分区方式
- 哈希分区:适合有规律生成的字段。
- 范围分区:适用于数值或日期类型的字段。间隔分区是其一种特例。
- 列表分区:适用于取值较固定的字符类型字段。
分区策略
- 使用主键分区:
- 优点:避免局部索引升级为全局索引,从而防止分区无法truncate和高并发写入慢的问题。
- 使用关联列分区:
- 根据业务SQL优先选择过滤性更好的列作为分区键。
- 引入分区智能连接(Partition Wise Join,PWJ)以提高性能,前提是对表采用相同的分区方式且分区存储位置一致。
分区一致性
- 使用
sp_set_para_value
设置参数来保证每个BP上有指定数量的哈希子分区。
- 创建哈希分区表和范围哈希分区表的具体语法示例。
DPC执行计划
- 新增的操作符ESEND、ERECV、GI(Granule Iterator)用于控制并行处理中的数据流。
- GI用于分区裁剪优化,剔除不满足条件的分区。
性能优化建议
- 选择合适的分区列:优先选择主键中的列作为分区键,否则局部索引将升级为全局索引。
- PWJ优化:确保并行度足够,且两表分区方式相同。
- 一级分区表:建议使用一级分区表,避免二级分区带来的复杂性。
- 分区方式选择:
- 小表(千万以下):普通表或一级哈希。
- 大表(千万至五千万):优先选择主键中频率高、筛选性好的字段哈希分区。
- 超大表(五千万以上):范围(业务时间)+哈希关联字段。
特殊注意事项
- 如果源端表有主键,则分区列应包含在主键中,如果主键没有实际所有切不进行业务交互,迁移过程中如果出现慢的情况,可以先不设置主键,性能问题可以使用索引解决。
- 视图优化:使用时间做一级范围分区,ID或Name做二级哈希分区,且哈希分区数相同,尽量存储在同一BP上。
- 抽数优化:将UPDATE操作变更为DELETE+INSERT以减少维护全局索引的工作量。
分区时需要沟通事项
- 确认分区的必要性,避免不必要的分区。
- 根据厂商的查询语句和关联条件调整分区策略。
- 减少分区数量以提高插入性能。