基于开销的清理延迟
这个特性的目的是允许管理员减少VACUUM和ANALYZE语句在并发活动的数据库上的I/O影响。比如,像VACUUM和ANALYZE这样的维护语句并不需要迅速完成,并且不希望这些维护语句严重干扰系统执行其他的数据库操作。基于开销的清理延迟为管理员提供了一个实现这个目的手段。
有些清理操作会持有关键的锁,这些操作应该尽快结束并释放锁。所以GaussDB的机制是,在这类操作过程中,基于开销的清理延迟不会发生作用。为了避免在这种情况下的长延时,实际的开销限制取下面两者之间的较大值:
- vacuum_cost_delay*accumulated_balance/vacuum_cost_limit
- vacuum_cost_delay*4
背景信息
在ANALYZE | ANALYSE(详情请参见《开发指南》中“SQL参考 > SQL语法 > ANALYZE | ANALYSE”章节)和VACUUM(详情请参见《开发指南》中“SQL参考 > SQL语法 > 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中对应设置方法进行设置。
设置建议:此参数一般设置较小,常见的设置是10ms或20ms。调整此特性资源占用率时,建议调整其他参数,而不是此参数。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
vacuum_cost_page_hit
参数说明:设置vacuum清理一个缓冲区命中的数据页面的预估代价。该参数可在PDB级别设置。
参数类型:整型
参数单位:无
取值范围:0 ~ 10000
默认值:1。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
vacuum_cost_page_miss
参数说明:设置vacuum清理一个缓冲区中未命中的数据页面的预估代价。该参数可在PDB级别设置。
参数类型:整型
参数单位:无
取值范围:0 ~ 10000
默认值:10。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
vacuum_cost_page_dirty
参数说明:vacuum清理页面会产生脏页,当清理的数据页面原先是干净页面时,由于vacuum清理会产生一个需要刷脏到磁盘的额外代价,通过设置该参数,来表示vacuum清理该类数据页面的代价。该参数可在PDB级别设置。
参数类型:整型
参数单位:无
取值范围:0 ~ 10000
默认值:20。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
vacuum_cost_limit
参数说明:设置清理线程休眠的开销限制。当vacuum线程执行的代价达到vacuum_cost_limit时,该线程休眠一次,休眠vacuum_cost_delay时间。该参数可在PDB级别设置。
参数类型:整型
参数单位:无
取值范围:1 ~ 10000
默认值:1000。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于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不及时。