【问题标题】:VACUUM is taking a lot of timeVACUUM 需要很多时间
【发布时间】:2020-03-19 18:09:12
【问题描述】:

以下命令 VACUUM my_table 已经在 Postgres (v11.5) 上运行了 24 小时

桌子周围有:

  • 1.12 亿行
  • 表空间:193 GB
  • 6 个不同字段的 6 个索引 + 主键索引

这正常吗?

如果有帮助,请提供更多信息...

  • AWS RDS 实例
  • 16GB 内存 + 4 个 vCPU (db.m5.xlarge)
  • 800GB 分配的存储空间(目前数据库占用了 495GB)
  • 预置 IOPS - 10000

在此处添加更多信息 -

  • SELECT relname, n_dead_tup FROM pg_stat_user_tables; 返回163441017
  • 我们没有对数据库运行任何应用程序查询,我们想让数据库完成真空过程

【问题讨论】:

  • 这个问题最好在姐妹网站上问:dba.stackexchange.com
  • select * from pg_stat_progress_vacuum 显示什么?
  • @jjanes 它显示相位=scanning heap

标签: postgresql postgresql-11


【解决方案1】:

可以。也许您的 16GB RAM 太低,无法有效地处理大表 (190GB)。非常通用的规则说,所以 RAM 应该是大约 1/10 db 大小。

您可以检查的内容:

a) 查看表pg_stat_activity 的相关进程并检查vacuum 是否未处于等待锁定状态。

b) 如果可以,请检查与 IO 相关的指标。也许在那里你会看到高 IO 等待 - 这是信号,所以你的 IO 过载,然后vacuum 可能会很慢。 193GB的表真的很大。

【讨论】:

  • vacuum 进程的状态现在是“扫描堆”,之前是“清理索引”。所以事情正在发生变化。就 IO 指标而言,它通常较低,因此这似乎不是瓶颈。
猜你喜欢
  • 2018-05-21
  • 1970-01-01
  • 1970-01-01
  • 2021-12-02
  • 1970-01-01
  • 1970-01-01
  • 2011-10-02
  • 2021-01-11
  • 2014-08-16
相关资源
最近更新 更多