Undo
Undo的GUC参数仅对Ustore有效。
undo_space_limit_size
参数说明:用于控制undo强制回收阈值,达到阈值的80%启动强制回收。建议设置undo_space_limit_size参数不小于undo_limit_size_per_transaction参数。
参数类型:整型
参数单位:页面(8kB)
取值范围:102400 ~ 2147483647,对应的默认单位为页面。
默认值:33554432(即256GB)
设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。例如,取值1000000,表示undo_space_limit_size为1000000页;取值1000000kB,表示undo_space_limit_size为1000000kB。取值如果要带单位,必须为kB、MB、GB,不能为TB。
设置建议:一般情况保持默认值即可。如果磁盘空间很小,无法满足默认值的需求,可以按需将该参数调小;如果业务中存在长事务或大事务,需要根据磁盘情况将undo_space_limit_size调大,具体调整值可以参考gs_stat_undo系统函数的“info”列,详情请参见《开发指南》中“SQL参考 > 函数和操作符 > 系统管理函数 > Undo 系统函数”章节的“gs_stat_undo 参数说明”表。
设置不当的风险与影响:当undo记录无法及时回收,设置偏小可能会发生undo记录强制回收,导致低概率报错 “snapshot too old! the undo record has been forcibly discard”。当磁盘空间不足时,如果undo记录无法及时回收,该参数设置偏大可能会导致数据库系统保留较多undo记录,与其他数据抢占磁盘物理空间,磁盘空间不足时有可能影响业务。
undo_limit_size_per_transaction
参数说明:用于控制单事务undo分配空间阈值,达到阈值时事务报错回滚。建议设置undo_limit_size_per_transaction参数不大于undo_space_limit_size参数。若设置的undo_limit_size_per_transaction参数大于undo_space_limit_size参数,用户调用show undo_limit_size_per_transaction命令查询参数值时,显示出来的值和用户设置的值仍保持一致,只是在使用时会取undo_space_limit_size和undo_limit_size_per_transaction两者的较小值,作为实际的单事务undo分配空间阈值。
参数类型:整型
参数单位:页面(8kB)
取值范围:256 ~ 2147483647,对应的默认单位为页面。如果设置的值超过了134217728(即1TB),则实际生效的值为134217728。
默认值:4194304(即32GB)
设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。例如,取值10000,表示undo_limit_size_per_transaction为10000页;取值10000kB,表示undo_limit_size_per_transaction为10000kB。取值如果要带单位,必须为kB、MB、GB,不能为TB。
设置建议:一般情况保持默认值即可。如果磁盘空间/内存空间很小,无法满足默认值的需求,可以按需将该参数调小;如果业务中存在长事务或大事务,单个事务内产生 Undo 记录量大于该参数设置值,需要根据磁盘情况将undo_limit_size_per_transaction调大,具体调整值可以参考 gs_stat_undo 系统函数的“info”列,详情请参见《开发指南》中“SQL参考 > 函数和操作符 > 系统管理函数 > Undo 系统函数”章节的“gs_stat_undo 参数说明”表。如果设置undo_limit_size_per_transaction超过1TB,可能会影响系统的性能和稳定性,因此如果设置的值超过了134217728(即1TB),用户调用show undo_limit_size_per_transaction命令查询参数值时,显示的值和用户设置的值保持一致,但实际生效的值为134217728。
设置不当的风险与影响:设置偏小可能会导致单事务内生成undo记录超过该阈值,报错“undo size of the transaction exceeds the threshold ”,进而事务回滚。