RDS PostgreSQL stats collector进程占用CPU和IO高导致慢SQL增多

更新时间:2024-08-08 02:08:42

问题描述

RDS PostgreSQL出现慢SQL增多的情况,经排查发现stats collector进程占用了较高的CPUIO。

说明

在增强监控中,可以通过查看指标os.cpu_process.pgstat来监测stats collector进程的CPU占用情况。详情请参见查看增强监控

问题原因

RDS PostgreSQL 14及以下版本中,统计信息是通过stats collector进程写入文件的,而autovacuum worker进程需要频繁更新统计信息。首先,autovacuum worker进程会读取统计信息,然后进行更新,并将更新后的信息发送给stats collector进程,由后者负责写入。当autovacuum频繁运行时,autovacuum workerstats collector都会占用较高的CPUIO资源,导致实例中出现更多的慢SQL。此外,autovacuum清理死元组(dead tuple)的效率也会降低,从而进一步导致出现慢SQL。

在表特别多的实例中,更容易发生上述场景,因为随着表的增多,统计信息的规模也会增大,从而导致统计信息的读写速度变慢。

解决方案

短期解决方案

  • 定期手动运行SQL命令:VACUUM FREEZE,以减少autovacuum运行的频率。

  • 增加autovacuum_vacuum_scale_factorautovacuum_vacuum_insert_scale_factor等参数的值,以减少autovacuum运行的频率。详细操作请参见设置实例参数

  • 使用通用云盘提高IO吞吐量性能。ESSD云盘支持变更为通用云盘,详情请参见ESSD云盘变更为通用云盘

长期解决方案

RDS PostgreSQL的大版本升级至15版本及以上。RDS PostgreSQL 15及以上版本将统计信息放入了共享内存,并去掉了stats collector进程,避免对物理IO的占用。升级实例大版本请参见RDS PostgreSQL大版本升级

相关文档

  • 本页导读 (1)
  • 问题描述
  • 问题原因
  • 解决方案
  • 短期解决方案
  • 长期解决方案
  • 相关文档
AI助理

点击开启售前

在线咨询服务

你好,我是AI助理

可以解答问题、推荐解决方案等