資料庫表存在記憶體中

2021-08-18 17:50:19 字數 1669 閱讀 2156

資料庫有一種機制: 一些程式啟動就需要查詢的表,和一些被頻繁訪問的表。比如:

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...