自动清理
系统自动清理进程(autovacuum)自动执行VACUUM和ANALYZE命令,回收被标识为删除状态的记录空间,并更新表的统计数据。
autovacuum不会阻塞用户发起的业务语句,且autovacuum和autoanalyze语句可以并行,不会有冲突,该功能仅在8.2.1.300以上版本支持。
autovacuum
参数说明:控制是否启动数据库自动清理进程(autovacuum)。自动清理进程运行的前提是将track_counts设置为on。
参数类型:SIGHUP
取值范围:布尔型
- on表示开启数据库自动清理进程。
- off表示关闭数据库自动清理进程。
默认值:on
- 当设置autovacuum为on,autovacuum_max_workers为0时,表示系统不会自动进行autovacuum,只会在故障恢复后,自动清理两阶段事务。
- 当设置autovacuum为on,autovacuum_max_workers大于0时,表示系统不仅在故障恢复后,自动清理两阶段事务,并且还可以自动清理进程。
- 使用gs_clean工具(-N参数)查询出异常两阶段事务的xid以及处于prepared的节点。
- 登录事务处于prepared状态的节点,系统管理员连接一个可用的数据库(如gaussdb),执行语句SET xc_maintenance_mode = on。
- 根据事务全局状态提交或者回滚此两阶段事务(如提交语句、回滚语句)。
autovacuum_mode
参数说明:该参数仅在autovacuum设置为on的场景下生效,它控制autoanalyze或autovacuum的打开情况。
参数类型:SIGHUP
取值范围:枚举类型
- analyze表示只执行autoanalyze。
- vacuum表示只执行autovacuum。
- mix表示autoanalyze和autovacuum都执行。
- none表示二者都不执行。
默认值:mix
autoanalyze_mode
参数说明:设置autoanalyze的模式。该参数仅8.2.0及以上集群版本支持。
参数类型:USERSET
取值范围:枚举类型
- normal表示普通的autoanalyze。
- light表示轻量化的autoanalyze。
默认值:
- 若当前集群为低版本升级到8.2.0及以上集群版本,为保持和前向兼容,默认值为normal。
- 若当前集群为新装的8.2.0及以上集群版本,默认值为light。
autoanalyze_timeout
参数说明:设置autoanalyze的超时时间。在对某张表做autoanalyze时,如果该表的analyze时长超过了autoanalyze_timeout,则自动取消该表此次analyze。
参数类型:SIGHUP
取值范围:整型,0~2147483,单位为秒(s)。
默认值:5min
analyze_stats_mode
参数说明:设置analyze计算统计信息的模式。
参数类型:USERSET
取值范围:枚举类型
- memory表示强制使用内存计算统计信息,不计算多列统计信息。
- sample_table表示强制使用临时采样表计算统计信息,临时表不支持使用该模式。
- dynamic表示按内存maintenance_work_mem大小自适应选择统计信息计算模式,若maintenance_work_mem可放下样本,则使用内存方式,否则使用临时采样表方式。
默认值:
- 若当前集群为低版本升级到8.2.0.100及以上集群版本,为保持和前向兼容,默认值为memory。
- 若当前集群为新装的8.2.0.100及以上集群版本,默认值为dynamic。
analyze_sample_mode
参数说明:设置analyze时使用的采样模型。
参数类型:USERSET
取值范围:整型,0~2。
- 0 表示使用默认蓄水池采样模型。
- 1 表示使用优化的蓄水池采样模型。
- 2 表示使用range采样模型。
默认值:0
autovacuum_io_limits
参数说明:控制autovacuum进程每秒触发IO的上限。该参数8.1.2版本中已废弃,为兼容历史版本功能保留该函数,当前版本设置无效。
参数类型:SIGHUP
取值范围:整型,-1~1073741823。其中-1表示不控制,而是使用系统默认控制组。
默认值:-1
autovacuum_max_workers
参数说明:设置能同时运行的自动清理线程的最大数量。
参数类型:SIGHUP
取值范围:整型,0~128 。其中0表示不会自动进行autovacuum。
默认值:4
该参数与autovacuum共同发挥作用,对系统表和用户表的清理规则如下:
- autovacuum_max_workers = 0时,autovacuum被彻底关闭,不会对任何表做清理。
- autovacuum_max_workers > 0和autovacuum = off,只对系统表和开了delta表的列存表做清理(如vacuum delta表,vacuum cudesc表和delta merge)。
- autovacuum_max_workers > 0和autovacuum = on,会对所有表做清理。
autovacuum_naptime
参数说明:设置两次自动清理操作的时间间隔。
参数类型:SIGHUP
取值范围:整型,1~2147483 ,单位为秒(s)。
默认值:60s
autovacuum_vacuum_threshold
参数说明:设置触发VACUUM的阈值。当表上被删除或更新的记录数超过设定的阈值时才会对这个表执行VACUUM操作。
参数类型:SIGHUP
取值范围:整型,0~INT_MAX
默认值:50
autovacuum_analyze_threshold
参数说明:设置触发ANALYZE操作的阈值。当表上被删除、插入或更新的记录数超过设定的阈值时才会对这个表执行ANALYZE操作。
参数类型:SIGHUP
取值范围:整型,0~INT_MAX
默认值:
- 若当前集群为低版本升级到8.1.3及以上集群版本,为保持和前向兼容,默认值为10000。
- 若当前集群为新装的8.1.3及以上集群版本,默认值为50。
autovacuum_vacuum_scale_factor
参数说明:设置触发一个VACUUM时增加到autovacuum_vacuum_threshold的表大小的缩放系数。
参数类型:SIGHUP
取值范围:浮点型,0.0~100.0
默认值:0.2
autovacuum_analyze_scale_factor
参数说明:设置触发一个ANALYZE时增加到autovacuum_analyze_threshold的表大小的缩放系数。
参数类型:SIGHUP
取值范围:浮点型,0.0~100.0
默认值:
- 若当前集群为低版本升级到8.1.3及以上集群版本,为保持和前向兼容,默认值为0.25。
- 若当前集群为新装的8.1.3及以上集群版本,默认值为0.1。
autovacuum_freeze_max_age
参数说明:设置事务内的最大时间,使得表的pg_class.relfrozenxid字段在VACUUM操作执行之前被写入。
VACUUM也可以删除pg_clog/子目录中的旧文件;即使自动清理进程被禁止,系统也会调用自动清理进程来防止循环重复。
参数类型:SIGHUP
取值范围:整型,100 000~576 460 752 303 423 487
默认值:4000000000
autovacuum_vacuum_cost_delay
参数说明:设置在自动VACUUM操作里使用的开销延迟数值。
参数类型:SIGHUP
取值范围:整型,-1~100,单位为毫秒(ms)。其中-1表示使用常规的vacuum_cost_delay。
默认值:2ms
autovacuum_vacuum_cost_limit
参数说明:设置在自动VACUUM操作里使用的开销限制数值。
参数类型:SIGHUP
取值范围:整型,-1~10000。其中-1表示使用常规的vacuum_cost_limit。
默认值:-1
enable_pg_stat_object
参数说明:控制auto vacuum是否更新PG_STAT_OBJECT系统表。该参数仅8.2.1及以上集群版本支持。
参数类型:USERSET
取值范围:布尔型
- on表示auto vacuum更新PG_STAT_OBJECT系统表。
- off表示auto vacuum不更新PG_STAT_OBJECT系统表。
默认值:on
enable_col_index_vacuum
参数说明:控制是否允许autovacuum清理列存索引脏数据。列存索引脏数据的清理能避免索引空间持续膨胀,优化带索引表的入库性能。该参数仅8.2.1.100及以上集群版本支持。
参数类型:SIGHUP
取值范围:布尔型
- on表示开启autovacuum清理列存索引脏数据功能。
- off表示关闭autovacuum清理列存索引脏数据功能。
默认值:on
新安装集群默认开启,老集群升级后默认关闭。