【发布时间】:2021-12-27 15:47:48
【问题描述】:
我对 Heroku Postgres 的计划是 8GB RAM。
我尝试使用“order by”运行查询,但内存不足!
我尝试将 work_mem 设置为 2GB,然后设置为 4GB 并得到相同的错误。
ALTER DATABASE xxxx SET work_mem = '4096MB';
直到最近,所有问题都很好,但突然一切都卡住了。
将计划升级到 15RAM 并将 work_mem 设置为 8GB 后,我得到了同样的错误。 Heroku 支持建议将“temp_tablespaces”设置为“pg_default”,但我再次遇到同样的错误
ALTER DATABASE xxxx SET work_mem = '8192MB';
ALTER DATABASE xxxx SET temp_tablespaces = 'pg_default';
我不明白服务器发生了什么,Heroku 支持并没有真正帮助。 可能是什么问题?
【问题讨论】:
-
您正在检索整个表,并且您似乎在强制引擎首先在内存中实现整个结果集。最简单的解决方案是在
public.table (created_at)上添加索引。这将允许引擎流水线化结果集并避免内存分配。 -
@The Impaler 这是索引列“created_at”
-
请将执行计划添加到问题中。
-
@The_impaler 您的回答不完整。该索引无济于事,因为它只有 created_by 列。对于 SELECT *,您必须在索引中拥有完整的表,这可以通过 CLUSTER 索引或具有 INCLUDE 子句的索引来实现,该子句包含表中除 create at 之外的所有其他列
标签: database postgresql heroku