PostgreSQL pg_prewarm

2021-09-16 16:09 更新
F.27.1. 函數(shù)
F.27.2. 配置參數(shù)

pg_prewarm模塊提供一種方便的方法把關(guān)系 數(shù)據(jù)載入到操作系統(tǒng)緩沖區(qū)或者 PostgreSQL緩沖區(qū)。可以使用pg_prewarm函數(shù)手工執(zhí)行預(yù)熱,或者通過在shared_preload_libraries中包括 pg_prewarm來自動(dòng)執(zhí)行預(yù)熱。在后一種情況中,系統(tǒng)將運(yùn)行一個(gè)后臺(tái)工作者,它會(huì)周期性地把共享內(nèi)存中的內(nèi)容記錄在一個(gè)名為autoprewarm.blocks的文件中,并且在重新啟動(dòng)后用兩個(gè)后臺(tái)工作者重新載入那些塊。

F.27.1. 函數(shù)

pg_prewarm(regclass, mode text default 'buffer', fork text default 'main',
           first_block int8 default null,
           last_block int8 default null) RETURNS int8

第一個(gè)參數(shù)是要預(yù)熱的關(guān)系。第二個(gè)參數(shù)是要使用的預(yù)熱方法,下文將會(huì) 進(jìn)一步討論。第三個(gè)參數(shù)是要被預(yù)熱的關(guān)系分叉,通常是main。 第四個(gè)參數(shù)是要預(yù)熱的第一個(gè)塊號(hào)(NULL也被接受,它等同于 零)。第五個(gè)參數(shù)是要預(yù)熱的最后一個(gè)塊號(hào)(NULL表示一直 預(yù)熱到關(guān)系的最后一個(gè)塊)。返回值是被預(yù)熱的塊數(shù)。

有三種可用的預(yù)熱方法。prefetch會(huì)向操作系統(tǒng)發(fā)出異步 預(yù)取請(qǐng)求(如果支持異步預(yù)?。恢С之惒筋A(yù)取則拋出一個(gè)錯(cuò)誤。 read會(huì)讀取要求范圍的塊。與prefetch 不同,它是同步的并且在所有平臺(tái)上都被支持,但是可能較慢。 buffer會(huì)把要求范圍的塊讀入道數(shù)據(jù)庫的緩沖區(qū)。

注意使用任意一種方法嘗試預(yù)熱比能緩存的數(shù)量更多的塊 — 使用 prefetch或者read(由 OS)或者使用 buffer(由PostgreSQL ) — 將很可能導(dǎo)致高編號(hào)塊被讀入時(shí)把低編號(hào)的塊從緩沖區(qū)中逐出的情況。 被預(yù)熱的數(shù)據(jù)也不享受對(duì)緩沖區(qū)替換的特別保護(hù),因此其他系統(tǒng)活動(dòng)可能會(huì)在剛剛 被預(yù)熱的塊被讀入后很快就將它們逐出。反過來,預(yù)熱也可能把其他數(shù)據(jù)逐出緩存。 由于這些原因,預(yù)熱通常在啟動(dòng)時(shí)最有用,那時(shí)緩沖大部分都為空。

autoprewarm_start_worker() RETURNS void

啟動(dòng)主要的autoprewarm工作者。這通常將會(huì)自動(dòng)發(fā)生,但是如果沒有在服務(wù)器啟動(dòng)時(shí)配置自動(dòng)預(yù)熱并且用戶希望在稍晚的時(shí)候啟動(dòng)該工作者,這個(gè)函數(shù)就能發(fā)揮作用。

autoprewarm_dump_now() RETURNS int8

立即更新autoprewarm.blocks。如果autoprewarm工作者沒有運(yùn)行但用戶希望它在下一次重啟后運(yùn)行,則這個(gè)函數(shù)會(huì)很有用。返回值是寫入到autoprewarm.blocks中的記錄數(shù)。

F.27.2. 配置參數(shù)

pg_prewarm.autoprewarm (boolean)

控制服務(wù)器是否應(yīng)該運(yùn)行autoprewarm工作者。默認(rèn)這個(gè)參數(shù)為on。這個(gè)參數(shù)只能在服務(wù)器啟動(dòng)時(shí)設(shè)置。

pg_prewarm.autoprewarm_interval (int)

這是更新autoprewarm.blocks的間隔。默認(rèn)是300秒。如果被設(shè)置為0,該文件將不會(huì)以常規(guī)的間隔方式轉(zhuǎn)儲(chǔ),而是只在服務(wù)器關(guān)閉時(shí)轉(zhuǎn)儲(chǔ)。

 


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)