pg_prewarm
模組提供了一種方便的方式,將關係資料載入到作業系統緩衝區快取或 PostgreSQL 緩衝區快取中。預熱可以透過使用 pg_prewarm
函式手動執行,也可以透過將 pg_prewarm
包含在 shared_preload_libraries 中自動執行。在後一種情況下,系統將執行一個後臺工作程序,它會定期將共享緩衝區的 contents 記錄在一個名為 autoprewarm.blocks
的檔案中,並在重啟後使用 2 個後臺工作程序重新載入這些相同的塊。
pg_prewarm(regclass, mode text default 'buffer', fork text default 'main', first_block int8 default null, last_block int8 default null) RETURNS int8
第一個引數是要預熱的關係。第二個引數是要使用的預熱方法,如下所述;第三個引數是要預熱的關係分叉,通常是 main
。第四個引數是要預熱的第一個塊號(NULL
被接受為零的同義詞)。第五個引數是要預熱的最後一個塊號(NULL
表示預熱到關係中的最後一個塊)。返回值是預熱的塊數。
有三種可用的預熱方法。prefetch
向作業系統發出非同步預取請求,如果支援則執行,否則丟擲錯誤。read
讀取請求的塊範圍;與 prefetch
不同,這是一種同步操作,在所有平臺和構建上都受支援,但可能較慢。buffer
將請求的塊範圍讀取到資料庫緩衝區快取中。
請注意,使用任何這些方法,嘗試預熱比可以快取的塊更多的塊——當使用 prefetch
或 read
時由作業系統快取,或當使用 buffer
時由 PostgreSQL 快取——可能會導致較低編號的塊在讀取較高編號的塊時被逐出。預熱資料也不會受到特殊保護免受快取逐出,因此新預熱的塊在讀取後不久可能被其他系統活動逐出;反之,預熱也可能將其他資料從快取中逐出。出於這些原因,預熱通常在啟動時最有用,那時快取大致是空的。
autoprewarm_start_worker() RETURNS void
啟動主 autoprewarm 工作程序。這通常會自動發生,但如果伺服器啟動時未配置自動預熱,並且您希望稍後啟動工作程序,則此功能很有用。
autoprewarm_dump_now() RETURNS int8
立即更新 autoprewarm.blocks
。如果 autoprewarm 工作程序未執行,但您預計在下次重啟後執行它,這可能會很有用。返回值是寫入 autoprewarm.blocks
的記錄數。
這些引數必須在 postgresql.conf
中設定。典型的用法可能是
# postgresql.conf shared_preload_libraries = 'pg_prewarm' pg_prewarm.autoprewarm = true pg_prewarm.autoprewarm_interval = 300s
Robert Haas <rhaas@postgresql.org>
如果您在文件中發現任何不正確之處、與您對特定功能的體驗不符或需要進一步澄清的地方,請使用 此表單 報告文件問題。