基于开销的清理延迟
该特性旨在降低VACUUM和ANALYZE等维护操作在高并发数据库中的I/O影响。通过基于开销的清理延迟机制,允许管理员平衡维护任务与正常业务操作的资源分配。该特性的主要作用如下:
- 非关键延迟:维护操作无需即时完成,可适应后台执行。
- 资源隔离:避免维护任务过度占用I/O资源,保障业务查询性能。
有些清理操作会持有关键的锁,这些操作应该尽快结束并释放锁。所以GaussDB的机制是,在这类操作过程中,基于开销的清理延迟不会发生作用。为了避免在这种情况下的长延时,实际的开销限制取下面两者之间的较大值:
- vacuum_cost_delay*accumulated_balance/vacuum_cost_limit
- vacuum_cost_delay*4
背景信息
在ANALYZE | ANALYSE和VACUUM语句执行过程中,系统维护一个内部的计数器,跟踪所执行的各种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中对应设置方法进行设置。
设置建议:此参数一般设置较小,常见的设置是10ms或20ms。调整此特性资源占用率时,建议调整其他参数,而不是此参数。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
vacuum_cost_page_hit
参数说明:设置vacuum清理一个缓冲区命中的数据页面的预估代价。
参数类型:整型
参数单位:无
取值范围:0 ~ 10000
默认值:1
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
vacuum_cost_page_miss
参数说明:设置vacuum清理一个缓冲区中未命中的数据页面的预估代价。
参数类型:整型
参数单位:无
取值范围:0 ~ 10000
默认值:10
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
vacuum_cost_page_dirty
参数说明:vacuum清理页面会产生脏页,当清理的数据页面原先是干净页面时,由于vacuum清理会产生一个需要刷脏到磁盘的额外代价,通过设置该参数,来表示vacuum清理该类数据页面的代价。
参数类型:整型
参数单位:无
取值范围:0 ~ 10000
默认值:20
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
vacuum_cost_limit
参数说明:设置清理线程休眠的开销限制。当vacuum线程执行的代价达到vacuum_cost_limit时,该线程休眠一次,休眠vacuum_cost_delay时间。
参数类型:整型
参数单位:无
取值范围:1 ~ 10000
默认值:1000
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。该值越大,Vacuum 的I/O频次限制越小,越不容易进入休眠状态,Vacuum效率越高,对业务I/O的影响就越大。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
vacuum_defer_cleanup_age
参数说明:通过设置该参数,延迟VACUUM操作清理无效行存表记录的时间,延迟等待的时间是以已经执行的事务数量来量化,通过设置vacuum_defer_cleanup_age的数值来控制延迟事务的数量。即VACUUM和VACUUM FULL操作不会立即清理被删除的元组,而是等到该元组已经被一定数量的事务处理后才执行清理和删除。
参数类型:整型
参数单位:无
取值范围:0 ~ 1000000,值为0表示不延迟。
默认值:0
设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:设置过大会导致VACUUM和VACUUM FULL不及时。