我们可以要求postgres对特定表使用缓存吗?根本不要将它用于几个表?
答案 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/