更新时间:2026-10-21 GMT+08:00
分享

自动清理

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

autovacuum

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

参数类型:布尔型

参数单位:无

取值范围:

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

默认值:on

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

设置建议:

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

设置不当的风险与影响:在ASTORE表中,关闭该参数会导致表中有过多的不活跃行存在,可能会影响查询性能。

autovacuum_mode

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

参数类型:枚举类型

参数单位:无

取值范围:

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

默认值:mix

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

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

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。

autoanalyze_timeout

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

这里的时间检查不能保证完全精确,原则上要保证各个CN上统计信息一致,因此在CN间同步信息时,即便超时也不会被打断。这导致实际的执行时间有可能超过用户定义的时间。

参数类型:整型

参数单位:s(秒)

取值范围:0 ~ 2147483,0表示没有超时限制。

默认值:300

设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。取值不能带单位。

设置建议:设置值取决于数据库的负载和性能需求。如果数据库的负载较轻,可以适当地将autoanalyze_timeout设置大些,以便自动分析操作有足够的时间来完成。如果数据库的负载较重,则应该将autoanalyze_timeout设置小些,以便自动分析操作可以在短时间内完成,从而避免影响其他重要的数据库操作。

设置不当的风险与影响:autoanalyze操作会消耗一定的系统资源,如果该参数设置太大,可能会导致系统资源被过度消耗,从而影响数据库的性能。如果设置太小,autoanalyze操作可能无法完成,可能会导致统计信息不准确,从而影响查询的执行计划和性能。

autovacuum_io_limits

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

参数类型:整型

参数单位:无

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

默认值:-1

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

设置建议:

  • 服务器有足够的磁盘I/O资源,可以将autovacuum_io_limits设置为较高的值,这将允许autovacuum线程更快地完成清理操作。
  • 服务器磁盘I/O资源有限,可以将autovacuum_io_limits设置为较低的值。这将限制autovacuum线程使用的磁盘I/O资源,以避免对其他线程的影响。

设置不当的风险与影响:

  • 设置为过高的值,可能会导致autovacuum线程使用过多的磁盘I/O资源,从而影响其他线程的性能。
  • 设置为过低的值,可能会导致autovacuum线程无法有效地清理表数据,从而导致表数据过度膨胀,影响数据库性能。

log_autovacuum_min_duration

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

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

参数类型:整型

参数单位:ms(毫秒)

取值范围:-1 ~ 2147483647

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

默认值:-1

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

设置建议:一般默认为-1。如果需要监控自动VACUUM操作的性能,可以将log_autovacuum_min_duration设置为一个大于0的值,以记录持续时间超过该值的自动VACUUM操作的日志信息。

设置不当的风险与影响:如果设置为0或者过小,则可能会记录大量的日志信息,影响系统性能;如果设置过大,可能无法及时感知自动清理时间过久,导致清理速度不足或异常情况。

autovacuum_max_workers

参数说明:设置能同时运行的自动清理线程的最大数量。

参数类型:整型

参数单位:无

取值范围:最小值为0(表示不会自动进行AUTOVACUUM),理论最大值为1024,用户设置超过1024时会内部自动调整为1024,但设置的参数值仍可能超过实际取值上限;该参数的实际取值上限与GUC参数max_connections和job_queue_processes大小有关,计算公式为“262143 - max_inner_tool_connections - max_connections - max_concurrent_autonomous_transactions - job_queue_processes - 辅助线程数 – autovacuum的launcher线程数[x(1] - 1”,其中辅助线程数和autovacuum的launcher线程数由两个宏来指定,当前版本的默认值分别为20和2。

默认值:3

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

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

设置不当的风险与影响:此参数设置越大,自动清理功能创建的线程数越多,占用的系统CPU和内存资源越多,所以设置时不建议设置过大,避免由于此参数设置过大导致内存无法分配或者占用过多CPU资源,导致数据库启动报错或业务受到影响。如果将该参数设置过小,可能会导致autovacuum线程无法及时清理和回收不再使用的表空间,从而导致数据库膨胀和性能下降。参数实际设置值需要根据取值范围的实际上限评估,一般可达到1024;如果设置值超过实际上限则会设置失败。此参数设置后对新线程生效,而对当前运行中的线程无效。

autovacuum_naptime

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

参数类型:整型

参数单位:s(秒)

取值范围:1 ~ 2147483

默认值:600(即10min)

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

设置建议:仅用Ustore表时推荐使用默认值。对于Astore表,设置值取决于用户的数据库环境和应用程序负载。如果数据库环境中有大量表的更新或删除操作,建议将该参数设置为较短的时间间隔,以确保及时清理无用的数据并避免数据库空间不足的情况。如果数据库环境中的更新或删除操作较少,则可以将该参数设置为较长的时间间隔,以减少自动清理线程的开销。

设置不当的风险与影响:

  • 如果将autovacuum_naptime设置为过短的时间间隔,可能会导致autovacuum线程的开销过大,从而影响数据库的性能。
  • 如果将autovacuum_naptime设置为过长的时间间隔,可能会导致无用的数据堆积,从而占用数据库空间,影响数据库的性能。

autovacuum_vacuum_threshold

参数说明:触发ASTORE表和USTORE表VACUUM操作的基准值。触发VACUUM的阈值=autovacuum_vacuum_threshold+reltuples(表上元组的个数)* autovacuum_vacuum_scale_factor。当表上被删除和更新的记录数总和超过阈值时,才会对这个表执行VACUUM操作。

参数类型:整型

参数单位:无

取值范围:0 ~ 2147483647

默认值:50

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

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

设置不当的风险与影响:

  • 该参数设置得过低,会导致频繁的VACUUM操作,增加系统开销,降低性能。
  • 该参数设置得过高,会导致表中过多的死亡行存在,可能会影响查询性能。

autovacuum_analyze_threshold

参数说明:触发ASTORE表和USTORE表ANALYZE操作的基准值。触发ANALYZE的阈值=autovacuum_analyze_threshold+reltuples(表上元组的个数)* autovacuum_analyze_scale_factor。当表上被删除、插入和更新的记录数总和超过阈值时才会对这个表执行ANALYZE操作。若表上存在全局二级索引,则当表上被删除、插入和更新的记录数总和超过阈值的20倍时,才会对全局二级索引执行ANALYZE操作。

参数类型:整型

参数单位:无

取值范围:0 ~ 2147483647

默认值:50

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

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

设置不当的风险与影响:

  • 该参数设置得过低,会导致频繁的ANALYZE操作,增加系统开销,降低性能。
  • 该参数设置得过高,表中的统计信息可能会过时,从而导致查询计划不准确,影响查询性能。

autovacuum_vacuum_scale_factor

参数说明:触发ASTORE表和USTORE表VACUUM操作的规模因子。触发VACUUM的阈值=autovacuum_vacuum_threshold+reltuples(表上元组的个数)* autovacuum_vacuum_scale_factor。当表上被删除和更新的记录数总和超过阈值时,才会对这个表执行VACUUM操作。

参数类型:浮点型

参数单位:无

取值范围:0.0 ~ 100.0

默认值:0.2

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

设置建议:设置值取决于表的负载和使用情况;如果是高写入负载的,则用户需要将该参数设置得更低,以便更频繁地清理表以避免性能下降。另一方面,如果是高读取负载的,则可以将该参数设置得更高,以避免在读取时不必要地浪费资源。

设置不当的风险与影响:

  • 该参数设置得太低,那么autovacuum线程可能会过于频繁地清理表,导致性能下降。
  • 该参数设置得太高,那么表可能无法及时清理,会变得非常大,占用过多的磁盘空间。

autovacuum_analyze_scale_factor

参数说明:触发ASTORE表和USTORE表ANALYZE操作的规模因子。触发ANALYZE的阈值=autovacuum_analyze_threshold+reltuples(表上元组的个数)* autovacuum_analyze_scale_factor。当表上被删除、插入和更新的记录数总和超过阈值时,才会对这个表执行ANALYZE操作。

参数类型:浮点型

参数单位:无

取值范围:0.0 ~ 100.0

默认值:0.1,即表上元组数的10%。

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

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

设置不当的风险与影响:

  • 该参数设置得过低,会导致频繁的ANALYZE操作,增加系统开销,降低性能。
  • 该参数设置得过高,可能会导致ANALYZE的频率过低,表中的统计信息可能会过时,从而导致查询计划不准确,影响查询性能。

autovacuum_analyze_window

参数说明:在周一至周日范围内指定一个或多个时间窗口,在给定时间窗口中以autovacuum_analyze_window_scale_factor作为触发ASTORE表和USTORE表ANALYZE操作的规模因子。

参数类型:字符串

参数单位:无

取值范围:空字符串或由一个或多个指定时间窗口组成的字符串,由逗号分割。

  • 指定时间窗口的字符串为键值对格式,即key=value。
  • 时间窗口的键必须为MONDAY_WINDOW、TUESDAY_WINDOW、WEDNESDAY_WINDOW、THURSDAY_WINDOW、FRIDAY_WINDOW、SATURDAY_WINDOW或SUNDAY_WINDOW,大小写不敏感。
  • 时间窗口的值的格式为HH:MM-HH:MM,按“-”分隔。左边为窗口开始时间,右边为窗口结束时间。该格式中不能包含空格,最小时间为00:00,最大时间为23:59。
  • 时间窗口的结束时间如果小于开始时间表明时间窗口出现跨天,如"MONDAY_WINDOW=22:00-02:00",表明时间窗口从周一的晚上22点到周二的凌晨2点。
  • 多天的时间窗口不能出现重叠。如无法设置"MONDAY_WINDOW=22:00-05:00,TUESDAY_WINDOW=03:00-09:00",可以设置"MONDAY_WINDOW=22:00-02:59,TUESDAY_WINDOW=03:00-09:00"。
  • 该参数不受autovacuum_mode参数控制,只要该参数设置成功,在给定时间窗口内会一直收集统计信息。
  • 该参数同一天只能配置一个窗口,如果同一天配置多个窗口,只有最后配置的窗口生效。
  • 时间窗口按照系统本地时间进行判断,改变系统时间时区时,请确认是否需要修改本参数配置的时间窗口。

默认值:""

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

设置建议:推荐使用默认值,根据业务场景适当调整。

设置不当的风险与影响:单个时间窗口设置的时间间隔需大于autovacuum_naptime取值,否则时间窗口可能无法生效。

autovacuum_analyze_window_scale_factor

参数说明:时间窗口内触发ASTORE表和USTORE表ANALYZE操作的规模因子。触发ANALYZE的阈值 = autovacuum_analyze_threshold + reltuples(表上元组的个数) * autovacuum_analyze_window_scale_factor。当表上被删除、插入和更新的记录数总和超过阈值时,才会对这个表执行ANALYZE操作。

参数类型:浮点型

参数单位:无

取值范围:0.0 ~ 100.0

默认值:0.1

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

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

设置不当的风险与影响:

  • 该参数设置得过低,会导致时间窗口内频繁的ANALYZE操作,增加系统开销,降低性能。
  • 该参数设置得过高,可能会导致时间窗口内ANALYZE的频率过低,表中的统计信息可能会过时,从而导致查询计划不准确,影响查询性能。

autovacuum_freeze_max_age

参数说明:指定ASTORE表和USTORE表pg_class.relfrozenxid64字段在超过多少个事务后,会强制执行VACUUM操作。即使自动清理被禁用,系统也会启动AUTOVACUUM线程。强制VACUUM结束后会清理pg_clog和pg_csnlog子目录中可以被删除的旧文件,防止pg_clog和pg_csnlog目录无限膨胀。

参数类型:整型

参数单位:无

取值范围:100000 ~ 576460752303423487

默认值:4000000000

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

设置建议:推荐使用默认值。如果数据库中的ASTORE表经常进行大量的更新和删除操作,那么建议将该参数设置为较小的值,以便及时回收垃圾。如果数据库中的ASTORE表很少进行更新和删除操作,那么可以将该参数设置为较大的值,以减少自动垃圾回收的频率。

设置不当的风险与影响:

  • 该参数设置得过低,会导致频繁的自动垃圾回收操作,增加系统开销,降低性能。
  • 该参数设置得过高,会导致自动垃圾回收的延迟,从而可能导致大量的无效数据占用磁盘空间,影响数据库性能。

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中对应设置方法进行设置。

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

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。

twophase_clean_workers

参数说明:该参数用来控制内核调度gs_clean工具的并发清理数。

参数类型:整型

参数单位:无

取值范围:1 ~ 10

默认值:3

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

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

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。

clog_keep_xids

参数说明:设置clog事务文件保留的事务数。

参数类型:整型

参数单位:无

取值范围:0 ~ 576460752303423487

  • 值为0时 :按照原有回收逻辑进行回收,不额外保留事务文件。
  • 值为非0且在取值范围内时 :按照新的回收逻辑进行回收(配置保留事务数的计算基于当前最新的事务ID,且仅当新配置的参数范围包含原本回收逻辑需要回收的事务文件时,才会触发保留机制)

默认值:0

说明:谨慎评估并确保环境预留足够的磁盘空间。每节点磁盘空间估算方法如下:

(配置保留事务数的计算基于当前最新的事务ID,且仅当新配置的参数范围包含原本回收逻辑需要回收的事务文件时,才会触发保留机制)

clog保留的空间占用(字节):(clog_keep_xids / 4)

clog保留的空间占用(hashbucket)(字节):db数 * buckets数 * (clog_keep_xids / 4)

例:clog_keep_xids配置4294967295的情况,普通场景共占用4294967295 / 4 = 1073741823字节,约1GB空间。

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

设置建议:推荐使用默认值(根据上面公式计算磁盘空间占用,在保证磁盘空间充足的前提下,如果不存在hashbucket业务建议设置为8589934590,如存在hashbucket业务建议设置为8388607)。

设置不当的风险与影响:设置不合理可能导致磁盘空间占用偏大,所有节点都涉及,请谨慎评估。

csnlog_keep_xids

参数说明:设置csnlog事务文件保留的事务数。

参数类型:整型

参数单位:无

取值范围:0 ~ 576460752303423487

  • 值为0时 :按照原有回收逻辑进行回收,不额外保留事务文件。
  • 值为非0且在取值范围内时 :按照新的回收逻辑进行回收(配置保留事务数的计算基于当前最新的事务ID,且仅当新配置的参数范围包含原本回收逻辑需要回收的事务文件时,才会触发保留机制)

默认值:0

说明:谨慎评估并确保环境预留足够的磁盘空间。每节点磁盘空间估算方法如下:

(配置保留事务数的计算基于当前最新的事务ID,且仅当新配置的参数范围包含原本回收逻辑需要回收的事务文件时,才会触发保留机制)

csnlog_keep_xids空间估算:

csnlog保留的空间占用(字节):(csnlog_keep_xids * 8)

例:csnlog_keep_xids配置4294967295的情况,共占用4294967295 * 8 = 34359738360字节,约34GB空间。

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

设置建议:推荐使用默认值(根据上面公式计算磁盘空间占用,在保证磁盘空间充足的前提下,建议设置为252645135)。

设置不当的风险与影响:设置不合理可能导致磁盘空间占用偏大,所有节点都涉及,请谨慎评估。

defer_csn_cleanup_time

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

参数类型:整型

参数单位:ms(毫秒)

取值范围:0 ~ 2147483647

默认值:5000(即5s)

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

设置建议:推荐使用默认值。一般来说,如果系统的负载较轻,可以将defer_csn_cleanup_time设置为较长的时间。如果系统的负载较重,建议将defer_csn_cleanup_time设置为较短的时间。这样可以确保系统在忙碌时也能保持良好的性能。

设置不当的风险与影响:defer_csn_cleanup_time参数用于控制系统何时清理已过期的CSN信息。它指定了系统在多长时间内保留已过期的CSN信息。如果设置得太短,系统可能会频繁地清理已过期的CSN信息,从而导致性能下降。如果设置得太长,系统可能会占用过多的内存,从而导致系统变慢或崩溃。

multixact_keep_mxids

参数说明:设置multixact事务文件保留的事务数。

参数类型:整型

参数单位:无

取值范围:0 ~ 576460752303423487

  • 值为0时 :按照原有回收逻辑进行回收,不额外保留事务文件。
  • 值为非0且在取值范围内时 :按照新的回收逻辑进行回收(配置保留事务数的计算基于当前最新的multixact ID,且仅当新配置的参数范围包含原本回收逻辑需要回收的事务文件时,才会触发保留机制)

默认值:0

说明:谨慎评估并确保环境预留足够的磁盘空间。每节点磁盘空间估算方法如下:

(配置保留事务数的计算基于当前最新的事务ID,且仅当新配置的参数范围包含原本回收逻辑需要回收的事务文件时,才会触发保留机制)

multixact_keep_mxids空间估算:

multixact保留的空间占用(字节):(multixact_keep_mxids * 8 + multixact_keep_mxids * members * 8)

例:multixact_keep_mxids配置4294967295的情况,multixact平均3并发(3个members)场景下,共占用

(4294967295 * 8 + 4294967295 * 3 * 8) = 137438953440字节,约137GB空间。

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

设置建议:推荐使用默认值(根据上面公式计算磁盘空间占用,在保证磁盘空间充足的前提下,建议设置为63161283)。

设置不当的风险与影响:设置不合理可能导致磁盘空间占用偏大,所有节点都涉及,请谨慎评估。

相关文档