# 基于开销的清理延迟
该特性旨在降低VACUUM和ANALYZE等维护操作在高并发数据库中的I/O影响。通过基于开销的清理延迟机制，允许管理员平衡维护任务与正常业务操作的资源分配。该特性的主要作用如下：
- 非关键延迟：维护操作无需即时完成，可适应后台执行。
- 资源隔离：避免维护任务过度占用I/O资源，保障业务查询性能。
![](https://support.huaweicloud.com/distributed-ref-v10-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](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/gaussdb-08-0221.html)和[VACUUM](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/gaussdb-08-0410.html)语句执行过程中，系统维护一个内部的计数器，跟踪所执行的各种I/O操作的近似开销。当累积的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一直阻塞。
**参数类型：**整型
**参数单位：**ms（毫秒）
**取值范围：**0 \~ 100。0表示关闭基于开销的清理延迟特性，正数值表示打开基于开销的清理延迟特性。在许多系统上，休眠的有效分辨率是10ms，因此把vacuum_cost_delay设置为一个不是10的整数倍数值与设置为下一个10的整数倍数值作用相同。
**默认值：**1
**设置方式：** 该参数属于USERSET类型参数，请参见[表1](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/gaussdb-08-0752.html#ZH-CN_TOPIC_0000002793787853__zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。
**设置建议：**此参数一般设置较小，常见的设置是10ms或20ms。调整此特性资源占用率时，建议调整其他参数，而不是此参数。
**设置不当的风险与影响：**请在充分理解参数含义，并经过测试验证后进行修改。
#### vacuum_cost_page_hit
**参数说明：**设置vacuum清理一个缓冲区命中的数据页面的预估代价。
**参数类型：**整型
**参数单位：**无
**取值范围：**0 \~ 10000
**默认值：**1
**设置方式：** 该参数属于USERSET类型参数，请参见[表1](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/gaussdb-08-0752.html#ZH-CN_TOPIC_0000002793787853__zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。
**设置建议：**推荐使用默认值。
**设置不当的风险与影响：**请在充分理解参数含义，并经过测试验证后进行修改。
#### vacuum_cost_page_miss
**参数说明：**设置vacuum清理一个缓冲区中未命中的数据页面的预估代价。
**参数类型：**整型
**参数单位：**无
**取值范围：**0 \~ 10000
**默认值：**10
**设置方式：** 该参数属于USERSET类型参数，请参见[表1](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/gaussdb-08-0752.html#ZH-CN_TOPIC_0000002793787853__zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。
**设置建议：**推荐使用默认值。
**设置不当的风险与影响：**请在充分理解参数含义，并经过测试验证后进行修改。
#### vacuum_cost_page_dirty
**参数说明：**vacuum清理页面会产生脏页，当清理的数据页面原先是干净页面时，由于vacuum清理会产生一个需要刷脏到磁盘的额外代价，通过设置该参数，来表示vacuum清理该类数据页面的代价。
**参数类型：**整型
**参数单位：**无
**取值范围：**0 \~ 10000
**默认值：**20
**设置方式：** 该参数属于USERSET类型参数，请参见[表1](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/gaussdb-08-0752.html#ZH-CN_TOPIC_0000002793787853__zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。
**设置建议：**推荐使用默认值。
**设置不当的风险与影响：**请在充分理解参数含义，并经过测试验证后进行修改。
 #### vacuum_cost_limit
**参数说明：** 设置清理线程休眠的开销限制。当vacuum线程执行的代价达到vacuum_cost_limit时，该线程休眠一次，休眠[vacuum_cost_delay]时间。
**参数类型：**整型
**参数单位：**无
**取值范围：**1 \~ 10000
**默认值：**1000
**设置方式：** 该参数属于USERSET类型参数，请参见[表1](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/gaussdb-08-0752.html#ZH-CN_TOPIC_0000002793787853__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/distributed-ref-v10-gaussdb/gaussdb-08-0752.html#ZH-CN_TOPIC_0000002793787853__zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。
**设置建议：**推荐使用默认值。
**设置不当的风险与影响** **：**设置过大会导致VACUUM和VACUUM FULL不及时。
