資料庫有一種機制: 一些程式啟動就需要查詢的表,和一些被頻繁訪問的表。比如:
m_ope_d
m_product_d
m_eqid_d
等可以考慮將這些資料量不大但經常使用的的表快取到記憶體當中。
做法有兩種:
1、把這些基礎資料存在redis裡面。每次用的時候從redis查,效率很高。但是有乙個缺點,update的資料不能及時同步到redis中。
2、把這些hot data放在gp的記憶體中。
預熱功能。使用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塊的數量。
預熱方法有三種:
注意,使用這些方法中的任何一種,試圖預熱更多的塊而不是快取的作業系統——當使用預取或讀取時,或使用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
(1 row)
mytest=# select pg_prewarm('test01','buffer','main') ;
pg_prewarm
(1 row)
mytest=# select count(*) from pg_buffercache where relfilenode = (select relfilenode from pg_class where relname = 'test01');
count
(1 row)
說明表已經被快取到記憶體中。
資料庫中過濾資料與在記憶體中過濾資料(延遲載入)
var temp from u in dbcontexttable where u.id 4 select u 規範的寫法其實是 iqueryabletemp from u in dbcontexttable where u.id 4 sele ct u 或者iqueryable temp from...
列儲存在記憶體中如何管理
memory management in the column store hana資料庫對列儲存進行了優化,保證高效的讀操作效能,同時也提供較好的寫操作效能。如上圖所有的列儲存在記憶體中的結構,分為兩部分主儲存和增量儲存。主儲存包含列表中的主要資料,進行了較高的壓縮以節省空間並加快搜尋和計算,如果...
在記憶體中讀寫資料
from io import stringio 建立 io.stringio記憶體緩衝器物件f f stringio 往f中寫入字串資料,並返回字串的長度 f.write hello 結果 5 f.write 結果 1 f.write world 結果 6 提取物件f中的全部內容 f.getvalu...