
# 基于开销的清理延迟
这个特性的目的是允许管理员减少VACUUM和ANALYZE语句在并发活动的数据库上的I/O影响。比如，像VACUUM和ANALYZE这样的维护语句并不需要迅速完成，并且不希望这些维护语句严重干扰系统执行其他的数据库操作。基于开销的清理延迟为管理员提供了一个实现这个目的手段。
![](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/public_sys-resources/notice_3.0-zh-cn.png)
有些清理操作会持有关键的锁，这些操作应该尽快结束并释放锁。所以GaussDB的机制是，在这类操作过程中，基于开销的清理延迟不会发生作用。为了避免在这种情况下的长延时，实际的开销限制取下面两者之间的较大值：
- vacuum_cost_delay\*accumulated_balance/vacuum_cost_limit
- vacuum_cost_delay\*4
 
#### 背景信息
在ANALYZE \| ANALYSE（详情请参见《开发指南》中"SQL参考 \> SQL语法 \> A \> ANALYZE \| ANALYSE"章节）和VACUUM（详情请参见《开发指南》中"SQL参考 \> SQL语法 \> V \> VACUUM"章节）语句执行过程中，系统维护一个内部的记数器，跟踪所执行的各种I/O操作的近似开销。如果积累的开销达到了vacuum_cost_limit声明的限制，则执行这个操作的线程将睡眠vacuum_cost_delay指定的时间。然后它会重置记数器然后继续执行。
这个特性是缺省关闭的。如需开启，需要把vacuum_cost_delay变量设置为一个非零值。
 #### vacuum_cost_delay
**参数说明：** vacuum拉起后台服务线程对于数据表死元组进行整理，它会和业务线程冲突，为了能够控制其对于业务的影响，设置该参数vacuum_cost_delay表示当vacuum执行的开销达到[vacuum_cost_limit]的值时，vacuum线程就休眠vacuum_cost_delay的时间把资源让给业务线程执行，来确保业务不会被后台vacuum一直阻塞。该参数可在PDB级别设置。
**参数类型：**整型
**参数单位：**ms（毫秒）
**取值范围：**0 \~ 100。0表示关闭基于开销的清理延迟特性，正数值表示打开基于开销的清理延迟特性。在许多系统上，休眠的有效分辨率是10ms，因此把vacuum_cost_delay设置为一个不是10的整数倍数值与设置为下一个10的整数倍数值作用相同。
**默认值：**0。在PDB场景内，若未设置该参数，则继承来自全局的设置。
**设置方式：** 该参数属于USERSET类型参数，请参考[表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)中对应设置方法进行设置。
**设置建议：**此参数一般设置较小，常见的设置是10ms或20ms。调整此特性资源占用率时，建议调整其他参数，而不是此参数。
**设置不当的风险与影响：**请在充分理解参数含义，并经过测试验证后进行修改。
#### vacuum_cost_page_hit
**参数说明：**设置vacuum清理一个缓冲区命中的数据页面的预估代价。该参数可在PDB级别设置。
**参数类型：**整型
**参数单位：**无
**取值范围：**0 \~ 10000
**默认值：**1。在PDB场景内，若未设置该参数，则继承来自全局的设置。
**设置方式：** 该参数属于USERSET类型参数，请参考[表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)中对应设置方法进行设置。
**设置建议**：推荐使用默认值。
**设置不当的风险与影响：**请在充分理解参数含义，并经过测试验证后进行修改。
#### vacuum_cost_page_miss
**参数说明：**设置vacuum清理一个缓冲区中未命中的数据页面的预估代价。该参数可在PDB级别设置。
**参数类型：**整型
**参数单位：**无
**取值范围：**0 \~ 10000
**默认值：**10。在PDB场景内，若未设置该参数，则继承来自全局的设置。
**设置方式：** 该参数属于USERSET类型参数，请参考[表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)中对应设置方法进行设置。
**设置建议**：推荐使用默认值。
**设置不当的风险与影响：**请在充分理解参数含义，并经过测试验证后进行修改。
#### vacuum_cost_page_dirty
**参数说明：**vacuum清理页面会产生脏页，当清理的数据页面原先是干净页面时，由于vacuum清理会产生一个需要刷脏到磁盘的额外代价，通过设置该参数，来表示vacuum清理该类数据页面的代价。该参数可在PDB级别设置。
**参数类型：**整型
**参数单位：**无
**取值范围：**0 \~ 10000
**默认值：**20。在PDB场景内，若未设置该参数，则继承来自全局的设置。
**设置方式：** 该参数属于USERSET类型参数，请参考[表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)中对应设置方法进行设置。
**设置建议**：推荐使用默认值。
**设置不当的风险与影响：**请在充分理解参数含义，并经过测试验证后进行修改。
 #### vacuum_cost_limit
**参数说明：** 设置清理线程休眠的开销限制。当vacuum线程执行的代价达到vacuum_cost_limit时，该线程休眠一次，休眠[vacuum_cost_delay]时间。该参数可在PDB级别设置。
**参数类型：**整型
**参数单位：**无
**取值范围：**1 \~ 10000
**默认值：**1000。在PDB场景内，若未设置该参数，则继承来自全局的设置。
**设置方式：** 该参数属于USERSET类型参数，请参考[表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)中对应设置方法进行设置。
**设置建议：**推荐使用默认值。该值越大，Vacuum 的I/O频次限制越小，越不容易进入休眠状态，Vacuum效率越高，对业务I/O的影响就越大。
**设置不当的风险与影响：**请在充分理解参数含义，并经过测试验证后进行修改。
#### vacuum_defer_cleanup_age
**参数说明：**通过设置该参数，延迟VACUUM操作清理无效行存表记录的时间，延迟等待的时间是以已经执行的事务数量来量化，通过设置vacuum_defer_cleanup_age的数值来控制延迟事务的数量。即VACUUM和VACUUM FULL操作不会立即清理被删除的元组，而是等到该元组已经被一定数量的事务处理后才执行清理和删除。
**参数类型：**整型
**参数单位：**无
**取值范围：**0 \~ 1000000，值为0表示不延迟。
**默认值**：0
**设置方式：** 该参数属于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)中对应设置方法进行设置。
**设置建议：**推荐使用默认值。
**设置不当的风险与影响** **：**设置过大会导致VACUUM和VACUUM FULL不及时。
