我们可以要求postgres使用特定表的缓存吗?

时间:2011-02-15 16:05:10

标签: database caching postgresql

我们可以要求postgres对特定表使用缓存吗?根本不要将它用于几个表?

5 个答案:

答案 0 :(得分:3)

为了读取数据并对其进行操作,PostgreSQL必须将其带入缓存。这样做也会暂时将其置于操作系统缓存中。您可以找到一个完整的描述,说明一旦进程在我的Inside the PostgreSQL Buffer Cache通话中停止使用数据,该数据最终将如何从数据库的缓存中逐出。

通过减少 shared_buffers 参数的大小,您可以从缓存中获得更快的驱逐,这可能会降低性能。 PostgreSQL总是使用操作系统缓存进行读取,并且在访问大量数据时无法防止它被污染。

对顺序扫描进行了优化,使数据库自己的 shared_buffers 缓存不被该数据接管。大于( shared_buffers / 4)的表仅限于在数据库端使用少量内存。这些仍然会破坏操作系统缓存,但是这些数据往往会保留不常使用的数据的时间比数据库少。

答案 1 :(得分:2)

不,你无法控制缓存的内容。

但是,如果这是一个经常访问的表,它仍然会被缓存。如果没有经常访问它,它将不会被缓存。

所以我没有找到试图控制它的理由。

答案 2 :(得分:2)

你做不到。 PostgreSQL在维护它本身方面做得非常好。事实上,我想不出你想修改这种行为的情况。

如果您发现问题(例如使用过多缓存的表),则可能意味着表无效使用(例如,有seq扫描查询)。如果某些表使用很少的缓存,那么要么是因为它是最佳的,要么是因为总缓存大小太小。无论哪种方式,PG都在尽力而为。

究竟是什么让你问这个问题?

答案 3 :(得分:2)

PostgreSQL 操作系统将更好地进行缓存。您不使用的数据不在缓存中,您 使用的数据都在缓存中。你不想打你的数据库和操作系统,没有必要。

答案 4 :(得分:1)

为什么不使用pgfincore将表存储在OS缓存中?

流动的博客展示了如何使用它。 http://francs3.blog.163.com/blog/static/4057672720107541611270/