怎么配置回滚段大小
一般情况下回滚段大小的参数使用默认值即可。为了达到最佳性能,部分场景下可调整回滚段大小的相关参数。具体场景与设置方法如下:
- 保留给定时间内的历史版本数据。
当使用闪回或者支撑问题定位时,通常希望保留更多历史版本数据,此时需要修改undo_retention_time。undo_retention_time默认值是0,取值范围为 0~3天,输入有效单位为s,min,h,d。调整的推荐值为900s,需要注意的是,undo_retention_time的取值越大,对业务的影响除了Undo空间占用增多,也会造成数据空间膨胀,进一步影响数据扫描更新性能。当不使用闪回或者希望减少历史旧版本的磁盘空间占用时,需要将undo_retention_time调小来达到最佳性能。可以通过如下方法选择更适合自己业务模型的取值:
使用Undo统计信息的系统函数gs_stat_undo,如果入参为false,输出undo_space_limit_size、undo_limit_size_per_transaction 、undo_retention_time 参数的合理化建议。具体详细参数值参见《开发指南》的“SQL参考 > 函数和操作符 > undo系统函数”章节。
- 保留给定空间大小的历史版本数据。
如果业务中存在长事务或大事务可能导致Undo空间膨胀时,需要将undo_space_limit_size调大,undo_space_limit_size默认值为256GB,取值范围为800MB~16TB。
在磁盘空间允许的条件下,推荐undo_space_limit_size设置翻倍。同时undo_space_limit_size的取值越大则占用磁盘空间越大,可能降低性能。如果查询视图系统函数gs_stat_undo的curr_used_undo_size发现不存在Undo空间膨胀,可以恢复为原值。
调整undo_space_limit_size后可相应提高单事务平均占用undo空间undo_limit_size_per_transaction的取值,undo_limit_size_per_transaction取值范围为2MB~16TB,默认值为32GB。设置时建议undo_limit_size_per_transaction不超过undo_space_limit_size,即单事务Undo分配空间阈值不大于Undo总空间阈值。
- 历史版本的保留参数的调整优先级。
在undo_retention_time、undo_space_limit_size、undo_limit_size_per_transaction中,先触发的空间阈值会先进行约束限制。
例如:Undo强制回收阈值参数undo_space_limit_size设置为1GB,Undo旧版本保留时间undo_retention_time为900s。如果900s内产生的历史版本数据不足1GB*0.8,则按照900s进行回收限制;否则按照1GB*0.8进行回收限制。遇到该情况时,如果磁盘空闲空间充足,则上调undo_space_limit_size,如果磁盘空闲空间紧缺,则下调undo_retention_time。