更新时间:2024-06-03 GMT+08:00

自动清理

系统自动清理线程(autovacuum)自动执行VACUUM和ANALYZE命令,回收被标识为删除状态的记录空间,并更新表的统计数据。

系统自动清理线程(autovacuum)包含VACUUM和ANALYZE两个过程。两次autovacuum的执行间隔时间为参数autovacuum_naptime控制,默认时间为10分钟,可根据实际业务场景进行配置。该间隔时间不能保证完全精确,一方面取决于环境的硬件条件和负载,当负载较高时,可能由于需要清理的数据量较大,造成延迟;另一方面取决于相关参数autovacuum_naptime和autovacuum_max_workers的配置值,autovacuum_naptime为执行间隔时间,配置值越小,执行间隔越小,但由于涉及数据的清理和统计信息的计算,占用的CPU、内存和IO开销均会增大;autovacuum_max_workers为同时运行的自动清理线程的最大数量,配置值越大,执行间隔越符合autovacuum_naptime的配置,但占用的CPU、内存和IO开销同样会增大。

此外,可以通过配置immediate_analyze_threshold参数,在新增数据量超过阈值时触发ANALYZE。阈值的计算方式见immediate_analyze_threshold的参数说明。

autovacuum

参数说明:控制数据库自动清理线程(autovacuum)的启动。自动清理线程运行的前提是将track_counts设置为on。

  • 如果希望系统在故障恢复后,具备自动清理两阶段事务的功能,请将autovacuum设置为on;
  • 当设置autovacuum为on,autovacuum_max_workers为0时,表示系统不会自动进行autovacuum,只会在故障恢复后,自动清理两阶段事务;
  • 当设置autovacuum为on,autovacuum_max_workers大于0时,表示系统不仅在故障恢复后,自动清理两阶段事务,并且还可以自动进行autovacuum。

参数类型:布尔型

参数单位:

取值范围:

  • on:表示开启数据库自动清理线程。
  • off:表示关闭数据库自动清理线程。

默认值:on

设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。

autovacuum_mode

参数说明:该参数仅在autovacuum设置为on的场景下生效,它控制autoanalyze和autovacuum的打开情况。

参数类型:枚举类型

参数单位:

取值范围:analyze、vacuum、mix、none

  • analyze:表示只做autoanalyze。
  • vacuum:表示只做autovacuum。
  • mix:表示autoanalyze和autovacuum都做。
  • none:表示autoanalyze和autovacuum都不做。

默认值:mix

设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。

设置建议:建议设置为默认值。

autoanalyze_timeout

参数说明:设置autoanalyze的超时时间。在对某张表做autoanalyze时,如果该表的analyze时长超过了autoanalyze_timeout,则自动取消该表此次analyze。

参数类型:整型

参数单位:秒(s)

取值范围:0~2147483,0表示不超时。

默认值:300

设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。

设置建议:无。

autovacuum_io_limits

参数说明:控制autovacuum线程每秒触发I/O的上限。

参数类型:整型

参数单位:

取值范围:-1~1073741823。其中-1表示不控制,而是使用系统默认控制组。

默认值:-1

设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。

log_autovacuum_min_duration

参数说明:当自动清理的执行时间大于或者等于某个特定的值时,向服务器日志中记录自动清理执行的每一步操作。设置此选项有助于追踪自动清理的行为。

举例如下:将log_autovacuum_min_duration设置为250ms,记录所有运行大于或者等于250ms的自动清理命令的相关信息。

参数类型:整型

参数单位:毫秒

取值范围:-1~2147483647。

  • 当参数设置为0时,表示所有的自动清理操作都记录到日志中。
  • 当参数设置为-1时,表示所有的自动清理操作都不记录到日志中。
  • 当参数设置为非-1时,当由于锁冲突的存在导致一个自动清理操作被跳过,记录一条消息(记录跳过autovacuum原因,便于审计)。

默认值:-1

设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。

置建议:一般默认-1。日志中需要记录autovacuum操作的场景下,则设置为非-1。

autovacuum_max_workers

参数说明:设置能同时运行的自动清理线程的最大数量,该参数的取值上限与GUC参数max_connections和job_queue_processes大小有关。

参数类型:整型

参数单位:

取值范围:最小值为0(表示不会自动进行autovacuum),理论最大值为262143,实际最大值为动态值,计算公式为“262143 - max_inner_tool_connections - max_connections - job_queue_processes - max_concurrent_autonomous_transactions - 辅助线程数 – autovacuum的launcher线程数 - 1”,其中辅助线程数和autovacuum的launcher线程数由两个宏来指定,当前版本的默认值分别为20和2。

默认值:3

调整建议:此参数设置越大,自动清理功能创建的线程数越多,占用的系统cpu和内存资源越多,所以设置时不建议设置过大,避免由于此参数设置过大导致内存无法分配或者占用过多cpu资源,导致数据库启动报错或业务受到影响。

设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。

autovacuum_naptime

参数说明:设置两次自动清理操作的时间间隔。

参数类型:整型

参数单位:s

取值范围:1~2147483。

默认值:10min(即600s)

设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。例如,不带单位取值600,表示autovacuum_naptime为600s;带单位取值10min,表示autovacuum_naptime为10min。取值如果要带单位,必须为s、min、h、d

设置建议:设置为默认值,不作调整。

autovacuum_vacuum_threshold

参数说明:用于计算触发VACUUM的阈值,计算方式为autovacuum_vacuum_threshold+ reltuples(表上元组的个数) * autovacuum_vacuum_scale_factor。当表上被删除或更新的记录数超过阈值时才会对这个表执行VACUUM操作。

参数类型:整型

参数单位:

取值范围:0 ~ 2147483647

默认值:50

设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

autovacuum_analyze_threshold

参数说明:用于计算触发ANALYZE操作的阈值,计算方式为autovacuum_analyze_threshold+ reltuples(表上元组的个数) * autovacuum_analyze_scale_factor。当表上被删除、插入或更新的记录数超过阈值时才会对这个表执行ANALYZE操作。

参数类型:整型

参数单位:

取值范围:0 ~ 2147483647

默认值:50

设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

autovacuum_vacuum_scale_factor

参数说明:VACUUM时计算表的规模因子,用于计算执行VACUUM的阈值,计算方式为autovacuum_vacuum_threshold+ reltuples (表上元组的个数)* autovacuum_vacuum_scale_factor。当表上被删除或更新的记录数超过阈值时才会对这个表执行VACUUM操作。

参数类型:浮点型

参数单位:

取值范围:0.0 ~ 100.0

默认值:0.2

设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。

设置建议:该值越大,触发VACUUM的条件就越高,对性能影响越小。

autovacuum_analyze_scale_factor

参数说明:ANALYZE表的规模因子,用于计算执行ANALYZE的阈值,计算方式为autovacuum_analyze_threshold+ reltuples(表上元组的个数) * autovacuum_analyze_scale_factor。当表上被删除、插入或更新的记录数超过阈值时才会对这个表执行ANALYZE操作。

参数类型:浮点型

参数单位:

取值范围:0.0 ~ 100.0

默认值:0.1

设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。

设置建议:该值越大,触发ANALYZE的条件就越高,对性能影响越小。

autovacuum_freeze_max_age

参数说明:对于ASTORE表,指定在一个VACUUM操作被强制执行前,一个表的pg_class.relfrozenxid域能保持的最大周期(事务的)。

  • VACUUM也可以删除pg_clog/子目录中的旧文件。
  • 即使自动清理线程被禁止,系统也会调用自动清理线程。

参数类型:长整型

参数单位:

取值范围:100 000~576 460 752 303 423 487

默认值:4000000000

设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。

autovacuum_vacuum_cost_delay

参数说明:设置在自动VACUUM操作里使用的开销延迟数值。

参数类型:整型

参数单位:毫秒(ms)

取值范围:-1~100。其中-1表示使用常规的vacuum_cost_delay。

默认值:20

设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。

autovacuum_vacuum_cost_limit

参数说明:设置在自动VACUUM操作里使用的开销限制数值。

参数类型:整型

参数单位:

取值范围:-1~10000。其中-1表示使用常规的vacuum_cost_limit。

默认值:-1

设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。

defer_csn_cleanup_time

参数说明:用来指定本地回收时间间隔。

该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。

取值范围:整型,0~2147483647,单位为毫秒(ms)。

默认值:5s(即5000ms)