2011-02-15 102 views

回答

1

不,您无法控制将要缓存的内容。

但是,如果这是一个频繁访问的表,它将被缓存。如果不经常访问它,它不会被缓存。

所以我没有看到试图控制这个的原因。

2

你不能那样做。 PostgreSQL本身就很好地维护它。事实上,我想不出你想修改这种行为的情况。

如果您发现问题(例如使用太多缓存的表),则可能意味着该表无效(例如,使用seq扫描进行查询)。如果某些表使用很少的缓存,则可能是因为只有很少的最佳缓存,或者因为总缓存大小太小。无论哪种方式,PG都尽其所能。

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

+1

seq扫描不一定会将表的数据放入共享缓冲区。我认为有一个阈值(以表的行数的百分比表示),行之外不会进入共享缓冲区 - 但我可能会误会 – 2011-02-15 19:12:25

1

PostgreSQL 操作系统会做得更好。你不使用的数据,不会在缓存中,数据你使用,是在缓存中。你不想打你的数据库和操作系统,这是没有必要的。

3

为了读取数据并对其进行操作,PostgreSQL必须将其放入缓存中。这样做也会暂时将其暂时存放在操作系统缓存中。一旦进程在我的Inside the PostgreSQL Buffer Cache讨论中停止使用它,您可以找到有关数据最终如何从数据库的缓存中逐出的确切说明。

通过减小shared_buffers参数的大小,您可以从缓存中更快地逐出,这可能会导致性能下降。 PostgreSQL始终使用OS缓存进行读取,并且无法防止在访问大量数据时受到污染。

对顺序扫描进行了优化,可以使数据库自己的shared_buffers缓存不被该数据接管。大于(shared_buffers/4)的表仅限于在数据库端使用少量内存。尽管如此,这些仍然会对操作系统缓存产生影响,但这些缓存往往会比数据库所需的时间更少。

相关问题