
# 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](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-40-0315.html#ZH-CN_TOPIC_0000002527988878__zh-cn_topic_0000002527058484_zh-cn_topic_0000002372412413_zh-cn_topic_0283137176_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。例如，取值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](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-40-0315.html#ZH-CN_TOPIC_0000002527988878__zh-cn_topic_0000002527058484_zh-cn_topic_0000002372412413_zh-cn_topic_0283137176_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。例如，取值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 "，进而事务回滚。
