【发布时间】:2020-12-28 22:35:24
【问题描述】:
我有一个 Flask 应用程序,它允许用户使用 SQL 查询 ~ 小型数据库(240 万行)。它类似于 HackerRank,但范围更有限。它部署在 Heroku 上。
我在测试期间注意到,通过运行大型查询,我可以预见地遇到 R14 错误(超出内存配额)或 R15(大大超出内存配额)。通常导致这种情况的查询超出了普通用户可能会执行的操作,例如 SELECT * FROM some_huge_table。也就是说,我担心当 5、10、100 个用户同时查询时,即使是很小的查询也会经常出现这些错误。
我正在寻找有关如何管理此类交互式网站的内存配额的建议。以下是我目前探索的内容:
- 更改 gunicorn 工人的数量。这产生了一些影响,但我仍然经常遇到 R14 和 R15 错误。
- 根据文本或 EXPLAIN 输出强制限制用户查询。这确实可以减少内存使用量,但恐怕它不会扩展到即使是非常有限的用户数。
- 移动到更高的 Heroku 层。我目前使用的计划提供 ~512MB RAM。最大的计划是 14GB 左右。同样,这会有所帮助,但甚至不会适度扩展,更不用说相关成本了。
- 显着减小数据库的大小。如果可能的话,我想避免这种情况。在 190 万行到 10k 或 50k 的表上进行餐巾纸数学运算,应用程序将大大减少内存需求并且可以更好地扩展,但仍会有一些适度的最大使用限制。
如您所见,在内存管理方面,我充其量只是个新手。我正在寻找一些关于如何解决这个一般问题的策略/想法,如果我需要大幅减少数据大小或为此投入大量美元,那也没关系。
谢谢
【问题讨论】:
标签: python postgresql heroku memory ram