2011-02-15 106 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)的表僅限於在數據庫端使用少量內存。儘管如此,這些仍然會對操作系統緩存產生影響,但這些緩存往往會比數據庫所需的時間更少。

相關問題