网络
虚拟私有云 VPC
弹性公网IP EIP
弹性负载均衡 ELB
NAT网关 NAT
云专线 DC
虚拟专用网络 VPN
云连接 CC
VPC终端节点 VPCEP
企业路由器 ER
企业交换机 ESW
全球加速 GA
企业连接 EC
云原生应用网络 ANC
安全与合规
安全技术与应用
Web应用防火墙 WAF
企业主机安全 HSS
云防火墙 CFW
安全云脑 SecMaster
DDoS防护 AAD
数据加密服务 DEW
数据库安全服务 DBSS
云堡垒机 CBH
数据安全中心 DSC
云证书管理服务 CCM
威胁检测服务 MTD
态势感知 SA
认证测试中心 CTC
边缘安全 EdgeSec
应用中间件
微服务引擎 CSE
分布式消息服务Kafka版
分布式消息服务RabbitMQ版
分布式消息服务RocketMQ版
API网关 APIG
分布式缓存服务 DCS
多活高可用服务 MAS
事件网格 EG
管理与监管
统一身份认证服务 IAM
消息通知服务 SMN
云监控服务 CES
应用运维管理 AOM
应用性能管理 APM
云日志服务 LTS
云审计服务 CTS
标签管理服务 TMS
配置审计 Config
应用身份管理服务 OneAccess
资源访问管理 RAM
组织 Organizations
资源编排服务 RFS
优化顾问 OA
IAM 身份中心
云运维中心 COC
资源治理中心 RGC
解决方案
高性能计算 HPC
SAP
混合云灾备
开天工业工作台 MIW
Haydn解决方案工厂
数字化诊断治理专家服务
云生态
云商店
合作伙伴中心
华为云开发者学堂
华为云慧通差旅
开发与运维
软件开发生产线 CodeArts
需求管理 CodeArts Req
流水线 CodeArts Pipeline
代码检查 CodeArts Check
编译构建 CodeArts Build
部署 CodeArts Deploy
测试计划 CodeArts TestPlan
制品仓库 CodeArts Artifact
移动应用测试 MobileAPPTest
CodeArts IDE Online
开源镜像站 Mirrors
性能测试 CodeArts PerfTest
应用管理与运维平台 ServiceStage
云应用引擎 CAE
开源治理服务 CodeArts Governance
华为云Astro轻应用
CodeArts IDE
Astro工作流 AstroFlow
代码托管 CodeArts Repo
漏洞管理服务 CodeArts Inspector
联接 CodeArtsLink
软件建模 CodeArts Modeling
Astro企业应用 AstroPro
CodeArts盘古助手
华为云Astro大屏应用
计算
弹性云服务器 ECS
Flexus云服务
裸金属服务器 BMS
云手机服务器 CPH
专属主机 DeH
弹性伸缩 AS
镜像服务 IMS
函数工作流 FunctionGraph
云耀云服务器(旧版)
VR云渲游平台 CVR
Huawei Cloud EulerOS
云化数据中心 CloudDC
网络
虚拟私有云 VPC
弹性公网IP EIP
弹性负载均衡 ELB
NAT网关 NAT
云专线 DC
虚拟专用网络 VPN
云连接 CC
VPC终端节点 VPCEP
企业路由器 ER
企业交换机 ESW
全球加速 GA
企业连接 EC
云原生应用网络 ANC
CDN与智能边缘
内容分发网络 CDN
智能边缘云 IEC
智能边缘平台 IEF
CloudPond云服务
安全与合规
安全技术与应用
Web应用防火墙 WAF
企业主机安全 HSS
云防火墙 CFW
安全云脑 SecMaster
DDoS防护 AAD
数据加密服务 DEW
数据库安全服务 DBSS
云堡垒机 CBH
数据安全中心 DSC
云证书管理服务 CCM
威胁检测服务 MTD
态势感知 SA
认证测试中心 CTC
边缘安全 EdgeSec
大数据
MapReduce服务 MRS
数据湖探索 DLI
表格存储服务 CloudTable
可信智能计算服务 TICS
推荐系统 RES
云搜索服务 CSS
数据可视化 DLV
数据接入服务 DIS
数据仓库服务 GaussDB(DWS)
数据治理中心 DataArts Studio
湖仓构建 LakeFormation
智能数据洞察 DataArts Insight
应用中间件
微服务引擎 CSE
分布式消息服务Kafka版
分布式消息服务RabbitMQ版
分布式消息服务RocketMQ版
API网关 APIG
分布式缓存服务 DCS
多活高可用服务 MAS
事件网格 EG
开天aPaaS
应用平台 AppStage
开天企业工作台 MSSE
开天集成工作台 MSSI
API中心 API Hub
云消息服务 KooMessage
交换数据空间 EDS
云地图服务 KooMap
云手机服务 KooPhone
组织成员账号 OrgID
云空间服务 KooDrive
管理与监管
统一身份认证服务 IAM
消息通知服务 SMN
云监控服务 CES
应用运维管理 AOM
应用性能管理 APM
云日志服务 LTS
云审计服务 CTS
标签管理服务 TMS
配置审计 Config
应用身份管理服务 OneAccess
资源访问管理 RAM
组织 Organizations
资源编排服务 RFS
优化顾问 OA
IAM 身份中心
云运维中心 COC
资源治理中心 RGC
区块链
区块链服务 BCS
数字资产链 DAC
华为云区块链引擎服务 HBS
解决方案
高性能计算 HPC
SAP
混合云灾备
开天工业工作台 MIW
Haydn解决方案工厂
数字化诊断治理专家服务
价格
成本优化最佳实践
专属云商业逻辑
云生态
云商店
合作伙伴中心
华为云开发者学堂
华为云慧通差旅
其他
管理控制台
消息中心
产品价格详情
系统权限
客户关联华为云合作伙伴须知
公共问题
宽限期保留期
奖励推广计划
活动
云服务信任体系能力说明
开发与运维
软件开发生产线 CodeArts
需求管理 CodeArts Req
流水线 CodeArts Pipeline
代码检查 CodeArts Check
编译构建 CodeArts Build
部署 CodeArts Deploy
测试计划 CodeArts TestPlan
制品仓库 CodeArts Artifact
移动应用测试 MobileAPPTest
CodeArts IDE Online
开源镜像站 Mirrors
性能测试 CodeArts PerfTest
应用管理与运维平台 ServiceStage
云应用引擎 CAE
开源治理服务 CodeArts Governance
华为云Astro轻应用
CodeArts IDE
Astro工作流 AstroFlow
代码托管 CodeArts Repo
漏洞管理服务 CodeArts Inspector
联接 CodeArtsLink
软件建模 CodeArts Modeling
Astro企业应用 AstroPro
CodeArts盘古助手
华为云Astro大屏应用
存储
对象存储服务 OBS
云硬盘 EVS
云备份 CBR
高性能弹性文件服务 SFS Turbo
弹性文件服务 SFS
存储容灾服务 SDRS
云硬盘备份 VBS
云服务器备份 CSBS
数据快递服务 DES
云存储网关 CSG
专属分布式存储服务 DSS
数据工坊 DWR
地图数据 MapDS
键值存储服务 KVS
容器
云容器引擎 CCE
云容器实例 CCI
容器镜像服务 SWR
云原生服务中心 OSC
应用服务网格 ASM
华为云UCS
数据库
云数据库 RDS
数据复制服务 DRS
文档数据库服务 DDS
分布式数据库中间件 DDM
云数据库 GaussDB
云数据库 GeminiDB
数据管理服务 DAS
数据库和应用迁移 UGO
云数据库 TaurusDB
人工智能
AI开发平台ModelArts
华为HiLens
图引擎服务 GES
图像识别 Image
文字识别 OCR
自然语言处理 NLP
内容审核 Moderation
图像搜索 ImageSearch
医疗智能体 EIHealth
企业级AI应用开发专业套件 ModelArts Pro
人脸识别服务 FRS
对话机器人服务 CBS
语音交互服务 SIS
人证核身服务 IVS
视频智能分析服务 VIAS
城市智能体
自动驾驶云服务 Octopus
盘古大模型 PanguLargeModels
IoT物联网
设备接入 IoTDA
全球SIM联接 GSL
IoT数据分析 IoTA
路网数字化服务 DRIS
IoT边缘 IoTEdge
设备发放 IoTDP
企业应用
域名注册服务 Domains
云解析服务 DNS
企业门户 EWP
ICP备案
商标注册
华为云WeLink
华为云会议 Meeting
隐私保护通话 PrivateNumber
语音通话 VoiceCall
消息&短信 MSGSMS
云管理网络
SD-WAN 云服务
边缘数据中心管理 EDCM
云桌面 Workspace
应用与数据集成平台 ROMA Connect
ROMA资产中心 ROMA Exchange
API全生命周期管理 ROMA API
政企自服务管理 ESM
视频
实时音视频 SparkRTC
视频直播 Live
视频点播 VOD
媒体处理 MPC
视频接入服务 VIS
数字内容生产线 MetaStudio
迁移
主机迁移服务 SMS
对象存储迁移服务 OMS
云数据迁移 CDM
迁移中心 MGC
专属云
专属计算集群 DCC
开发者工具
SDK开发指南
API签名指南
DevStar
华为云命令行工具服务 KooCLI
Huawei Cloud Toolkit
CodeArts API
云化转型
云架构中心
云采用框架
用户服务
账号中心
费用中心
成本中心
资源中心
企业管理
工单管理
客户运营能力
国际站常见问题
支持计划
专业服务
合作伙伴支持计划
我的凭证
华为云公共事业服务云平台
工业软件
工业数字模型驱动引擎
硬件开发工具链平台云服务
工业数据转换引擎云服务

自动清理

更新时间:2024-11-12 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

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

参数类型:整型

参数单位:

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

默认值:3

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

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

设置不当的风险与影响:此参数设置越大,自动清理功能创建的线程数越多,占用的系统CPU和内存资源越多,所以设置时不建议设置过大,避免由于此参数设置过大导致内存无法分配或者占用过多CPU资源,导致数据库启动报错或业务受到影响。如果将该参数设置得过低,可能会导致autovacuum线程无法及时清理和回收不再使用的表空间,从而导致数据库膨胀和性能下降。

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表VACUUM操作的删除或更新元组的最小数量值。触发VACUUM的阈值=autovacuum_vacuum_threshold+reltuples(表上元组的个数)*autovacuum_vacuum_scale_factor。当表上被删除或更新的记录数超过阈值时,才会对这个表执行VACUUM操作。

参数类型:整型

参数单位:

取值范围:0 ~ 2147483647

默认值:50

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

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

设置不当的风险与影响:在ASTORE表中:

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

autovacuum_analyze_threshold

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

参数类型:整型

参数单位:

取值范围:0 ~ 2147483647

默认值:50

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

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

设置不当的风险与影响:

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

autovacuum_vacuum_scale_factor

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

参数类型:浮点型

参数单位:

取值范围:0.0 ~ 100.0

默认值:0.2

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

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

设置不当的风险与影响:在ASTORE表中:

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

autovacuum_analyze_scale_factor

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

参数类型:浮点型

参数单位:

取值范围:0.0 ~ 100.0

默认值:0.1

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

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

设置不当的风险与影响:

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

autovacuum_freeze_max_age

参数说明:指定ASTORE表pg_class.relfrozenxid字段在超过多少个事务后,会强制执行VACUUM操作。即使自动清理被禁用,系统也会启动AUTOVACUUM线程。清理操作还允许从pg_clog/子目录中删除旧文件。

参数类型:整型

参数单位:

取值范围:100000 ~ 576460752303423487

默认值:4000000000

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

设置建议:推荐使用默认值。如果数据库中的ASTORE表经常进行大量的更新和删除操作,那么建议将该参数设置为较小的值,以便及时回收垃圾。如果数据库中的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中对应设置方法进行设置。

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

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

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信息,从而导致性能下降。如果设置得太长,系统可能会占用过多的内存,从而导致系统变慢或崩溃。

对自动清理进行参数调优

说明:

AUTOVACUUM清理速度与autovacuum_vacuum_cost_delay、autovacuum_vacuum_cost_limit等参数强相关,当业务表进行高并发写入时,使用默认的参数配置可能会出现AUTOVACUUM清理速度跟不上表空间膨胀场景,导致空间膨胀、性能下降等。例如,对Astore表进行高并发更新、插入删除,尤其是含有全局分区索引的大分区表(需要多次扫描清理全局分区索引),因此建议业务定时巡检确认空间膨胀情况,并对AUTOVACUUM参数进行针对性调优或定时在业务低峰期执行手动VACUUM,避免空间持续膨胀。

对大表的自动清理参数进行调优

AUTOVACUUM基于死亡元组百分比确认是否对特定表进行清理(详见自动清理规模因子参数autovacuum_vacuum_scale_factor,因此,对于元组较多的大表,默认参数下相对较难触发自动清理(例如表中元组超过一亿,死亡元组数量超过两千万才能触发一次清理),对于这种情况,可适当降低自动清理的规模因子,例如,可通过下面的方式进行手动调优:
ALTER TABLE table_name SET (autovacuum_vacuum_scale_factor = 0.05);
如果期望自动清理不依赖死亡元组的比例触发,而是依赖死亡元组数量触发,可单独调整自动清理的阈值与规模因子参数,例如,可通过以下方式手动调优,让指定表死亡元组达到一万时即可触发自动清理。
ALTER TABLE table_name SET (autovacuum_vacuum_threshold = 10000);
ALTER TABLE table_name SET (autovacuum_vacuum_scale_factor = 0.0);

对自动清理速率进行参数调优

  1. 确认是否需要调整自动清理参数
    • 通过运维视图查看指定表的死亡元组数与上一次自动清理时间等信息,当死亡元组远超自动清理阈值,并且距离上一次自动清理已经过去较长时间(例如一天),此时可基本确认当前实例需要手动调优自动清理参数。具体来说,可通过以下方式进行确认。
      -- 查看死亡元组信息:即查询结果中n_dead_tup字段;查看上一次自动清理时间,即查询结果中的last_autovacuum字段
      SELECT n_live_tup, n_dead_tup, last_autovacuum FROM pg_stat_user_tables WHERE relname = 'table_name';
      
      -- 获取表中元组信息
      SELECT reltuples FROM pg_class WHERE relname = 'table_name';

      通过公式:autovacuum_vacuum_threshold+reltuples(表上元组的个数)*autovacuum_vacuum_scale_factor计算autovacuum触发阈值(当手动配置了单表触发阈值时,需要替换以上参数为调整后的参数),确认计算结果是否远大于n_dead_tup。结合last_autovacuum查询结果确认是否长时间未执行AUTOVACUUM。

    • 结合数据库监控看板,确认数据库表空间膨胀长期趋势,如果膨胀率长时间超过20%,此时也需要进行手动参数调优。
  2. 调优方法
    在确认了空间存在持续膨胀风险后,需要考虑手动对AUTOVACUUM参数进行调优。
    • 自动清理速率的主要取决于autovacuum_vacuum_cost_delay与autovacuum_vacuum_cost_limit两个参数,默认情况下仅对这两个参数进行手动调优即可。一般来说,自动清理线程扫描页面期间会产生开销,每当开销达到autovacuum_vacuum_cost_limit,自动清理线程会休眠autovacuum_vacuum_cost_delay时间,因此,调高autovacuum_vacuum_cost_limit参数或降低autovacuum_vacuum_cost_delay参数均可以提升自动清理性能,并且,单独调整两种参数可以获得近似等比的清理速率提升,但相应的,会导致自动清理线程出现额外的I/O增长。建议分阶段多次调整,确保对业务的影响保持在可控范围内,例如,调整autovacuum_vacuum_cost_delay从20ms降低到10ms,观测系统I/O一小时内的变动,确保对业务的影响可控,并结合自动清理线程的执行日志确认清理速度情况,确认是否可以选择更为激进的调优策略。
    • 对确认存在空间膨胀风险的库或业务表,手动执行VACUUM进行清理,以便于快速提高空间复用能力,并结合业务数据情况,在业务低峰期执行表级VACUUM FULL。
    • 结合业务场景,对频繁更新、大量插入删除等操作的业务表,每天定时在业务低峰期执行手动VACUUM ANALYZE,以便于快速回收死亡元组,并让查询优化器在规划用户查询时有更好的选择。
提示

您即将访问非华为云网站,请注意账号财产安全

文档反馈

文档反馈

意见反馈

0/500

标记内容

同时提交标记内容