您好,登錄后才能下訂單哦!
小編給大家分享一下PostgreSQL提前緩存數據的方法,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!
PostgreSQL怎么提前緩存數據
預熱功能,使用pg_prewarm函數,方便的將數據緩存至內存中。
這個功能不是自帶的,是存在在擴展包中,所以要使用前需要先添加擴展。
pg_prewarm(regclass, mode text default 'buffer', fork text default 'main', first_block int8 default null, last_block int8 default null) RETURNS int8
第一個參數是預熱的relation。
第二個參數是要使用預熱的方法
第三個參數是relation fork被預熱
第四個參數是預熱的第一個塊號
第五個參數是預熱的最后一個塊號
返回值是prewarm塊的數量。
預熱方法有三種:
1、對操作系統發出異步prefetch請求
2、讀取塊的請求范圍,但可能會較慢
3、緩沖區將請求的塊范圍(執行的查詢)讀入數據庫緩沖區緩存中。
注意,使用這些方法中的任何一種,試圖預熱更多的塊而不是緩存的操作系統——當使用預取或讀取時,或使用PostgreSQL在使用緩沖器時可能會導致較低編號的塊被釋放,因為較高編號的塊被讀入。預熱數據也沒有對緩存驅逐的特殊保護,因此其他系統活動可能會在讀取后不久將新的預熱塊驅逐出去;反之,預熱也可能從高速緩存中驅逐其他數據。由于這些原因,預熱通常在啟動時最有用,當緩存大部分為空時。
操作,實驗環境:
CentOS 7 + PG 10.1
創建extension
mytest=# create extension pg_prewarm ; CREATE EXTENSION
在這個實驗中,我們需要借助pg_buffercache 來查看內存中的變化。
mytest=# create extension pg_buffercache ; CREATE EXTENSION
我們重啟一下pg
service postgresql-10 restart
查看內存信息
mytest=# select count(*) from pg_buffercache where relfilenode = (select relfilenode from pg_class where relname = 'test01'); count ------- 0 (1 row) mytest=# select pg_prewarm('test01','buffer','main') ; pg_prewarm ------------ 2041 (1 row) mytest=# select count(*) from pg_buffercache where relfilenode = (select relfilenode from pg_class where relname = 'test01'); count ------- 2041 (1 row)
說明表已經被緩存到內存中。
看完了這篇文章,相信你對PostgreSQL提前緩存數據的方法有了一定的了解,想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。