微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PostgreSQL临时表缓存在内存中?

语境:

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

目的:

我想要做的是创建临时表(如果它们已经不存在),尽可能将它们存储在内存中,如果在某些时候没有足够的内存,则删除那些将被提交给临时表的内存.硬盘(我猜这些将是最近最少使用的).

例子:

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

问题:

>这是“提交下降”的意思吗?我见过有关的描述
会话和交易,但我真的不明白
概念.对不起,如果这个问题很愚蠢.
>如果不是,你知道任何简单的方法让Postgres做
这个?

解决方法

在最糟糕的情况下,我应该能够猜测我可以保留多少个内存表并尝试自己实现LRU,但它永远不会像Postgres那样好.

非常感谢你.

这是一个复杂的话题,可能需要深入讨论.我认为值得解释为什么Postgresql不支持这个以及你可以用最新版本来做什么来接近你想要做的事情.

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

>由单个后端缓冲,而不是共享缓冲区
>仅限本地可见,和
>未记录.

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

最终的结果是你真的不需要担心这个. Postgresql在某种程度上已经尝试做你要求它做的事情,而临时表的磁盘I / O要求比标准表要低得多.它不会强制表保留在内存中,如果它们变得足够大,页面可能会到达操作系统磁盘缓存,最终到达磁盘.这是一个重要的功能,因为它确保当许多人创建许多大型临时表时性能会优雅地降低.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐