【问题标题】:PostgreSQL on RDS suddenly eating all the storage available on the discRDS 上的 PostgreSQL 突然吃光了磁盘上的所有可用存储空间
【发布时间】:2018-10-31 01:02:55
【问题描述】:

其中一个查询导致我的 Postgres 冻结,它还导致一些奇怪的行为,例如读/写 IOPS 增加和 db 占用设备上的所有空间。这里有一些图表可以证明这一点。

删除查询之前

删除查询后

知道为什么会这样吗?

【问题讨论】:

  • “知道为什么会这样吗?”不,因为这个问题不清楚且不完整。分享表结构(stackoverflow.com/questions/2593803/…)和sqlfiddle.com 上的一些示例数据也向我们展示了查询..
  • 如果查询需要对数据进行排序或对其执行其他操作并且不符合work_mem 设置的内存限制,则使用临时文件。我看到做得不好的查询会占用 200-500GB 的存储空间并且还在增加。有时这是无法避免的,但不能在没有查询或提供explain 的情况下真正说出来。
  • 能否请您添加有关查询的更多详细信息?

标签: django postgresql amazon-web-services amazon-rds


【解决方案1】:

根据我的经验,这种情况发生在以下情况:

  • DB 的表中有很多死元组。
  • 查询执行正在使用磁盘空间(查询执行期间生成临时文件,work_mem 低)。
  • 您有很多孤立文件(不太常见)。

如果你想阅读官方文档: https://aws.amazon.com/premiumsupport/knowledge-center/diskfull-error-rds-postgresql/

【讨论】:

    【解决方案2】:

    可能有很多选择:

    1. 首先,它取决于您的数据库的大小。您能否提供一些额外的信息?
    2. 您的查询是什么?
    3. 您的连接拉取大小是多少?
    4. 您使用流式复制吗?

    在我看来,这可能是您的表格的索引 尝试检查受查询影响的表的索引。此外,问题可能是一个非常大的数据库,需要大量的 RAM 来处理。

    不要忘记检查查询中包含的联接。格式错误的连接可能会导致不需要的cross-joins

    【讨论】:

    • 数据库大小约为 6.5 GB。稍后我会用查询更新问题。
    • 我认为这是一个大问题,应该讨论这些问题。如果我们面临这个问题的复杂性,我认为值得在 GitHub 上展开讨论。我在生产服务器上遇到过这样的问题,它给我带来了很多问题。那为什么不呢? :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    • 2015-03-24
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    相关资源
    最近更新 更多