gpt4 book ai didi

内存中的PostgreSQL临时表缓存?

转载 作者:行者123 更新时间:2023-11-29 11:28:59 32 4
gpt4 key购买 nike

上下文:

我想在一些临时表中存储一些临时结果。这些表可能会在多个查询中重用,这些查询可能会及时发生,但在某些时候,我正在使用的进化算法可能不再需要一些旧表并不断生成新表。将有几个查询,可能同时使用这些表。只有一个用户执行所有这些查询。我不知道这是否澄清了关于 session 等的所有内容,我仍然不确定它是如何工作的。

目标:

我想做的是创建临时表(如果它们不存在),尽可能将它们存储在内存中,如果在某个时候没有足够的内存,删除那些将是致力于 HDD(我猜这些将是最近最少使用的)。

示例:

客户端将查询 EMAs具有不同的参数和具有不同系数的它们的集合,每个个体在使用的系数方面可能会有所不同,因此 EMA 的参数可能会重复,因为它们仍在基因库中,并且可能在一段时间后不需要。将有更多参数的类似查询,遗传算法将为参数找到正确的值。

问题:

  • 这就是“on commit drop”的意思吗?我看过有关的描述 session 和交易,但我真的不明白那些概念。对不起,如果这个问题很愚蠢。
  • 如果不是,你知道有什么简单的方法可以让 Postgres 做吗?这?

解决方法:

在最坏的情况下,我应该能够估计我可以在内存中保留多少张表,并尝试自己实现 LRU,但它永远不会像 Postgres 那样好。

非常感谢。

最佳答案

这是一个复杂的话题,可能需要深入讨论。我认为有必要解释为什么 PostgreSQL 不支持这一点,以及您可以用最新版本代替什么来接近您正在尝试做的事情。

PostgreSQL 有一个很好的方法来缓存多个用户的不同数据集。通常,您不希望让程序员指定临时表在变得非常大时必须保留在内存中。然而,临时表的管理方式与普通表完全不同,因为它们是:

  1. 由单独的后端缓冲,而不是共享缓冲区

  2. 仅在本地可见,并且

  3. 未登录。

这意味着您通常不会为临时表生成大量磁盘 I/O。这些表通常不会刷新 WAL 段,并且它们由本地后端管理,因此它们不会影响共享缓冲区的使用。这意味着数据只会偶尔写入磁盘,并且只有在需要为其他(通常更频繁的)任务释放内存时才会写入。您当然不会强制磁盘写入,只需要在其他东西用完内存时才需要读取磁盘。

最终结果是您真的不需要为此担心。 PostgreSQL 已经在一定程度上尝试执行您要求它执行的操作,并且临时表的磁盘 I/O 要求比标准表低得多。它不会强制表保留在内存中,如果它们变得足够大,页面可能会在操作系统磁盘缓存中过期,并最终在磁盘上。这是一项重要的功能,因为它可以确保在许多人创建许多大型临时表时性能平稳下降。

关于内存中的PostgreSQL临时表缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14162917/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com