db2 的緩衝池設計

2021-06-04 18:34:11 字數 1651 閱讀 6972

最近接到一些朋友的信,問一些關於緩衝區管理的問題。俺想藉此機會也寫個短篇總結一下「什麼是緩衝區管理」。

很多使用者可能都有疑問,緩衝區是不是越大越好,是乙個單獨的大緩衝池好還是若干個稍小的緩衝池好。

總地來說,這個問題沒有乙個標準答案。

在俺的經驗中,緩衝區管理可以歸納為兩個字:質,量

緩衝池的作用是把資料臨時存放在記憶體中,避免物理讀寫

因此,假設使用者使用64位例項,也就是邏輯記憶體基本沒有限制的情況下,如何用有限的物理記憶體跟有效地訪問海量資料,這個是緩衝池設計的關鍵。

而「質」的概念就是,如何更有效地將重要的資料駐留在記憶體。注意這裡「重要」的資料並不永遠等同於「最經常訪問」的資料。有的時候,有些表訪問不頻繁,但是每次訪問需要盡可能高的效率,但是緩衝區本身的設計是盡可能保留經常訪問的資料在記憶體,因此這兩者之間是有衝突的。「質」的含義就是,如何控制緩衝區使得最重要的資料駐留記憶體。

另一方面,「量」的含義就比較好理解了。在乙個有限記憶體的機器中,我們不可能把資料庫所有的資料放到記憶體裡(如果資料庫夠小就沒問題,但是對於大多使用者來說是不現實的)。因此,如何分配記憶體的使用,做到將最重要的資料放到記憶體,次重要的資料可以被反覆讀寫,這對於最小的緩衝區大小是有一定需求的。比如說我乙個最重要的表有100mb,你的緩衝區如果小於100mb肯定不可能把整個表放進去。但是如果緩衝區只有100mb並且只為這個表分配,那其他的資料怎麼辦?因此選擇乙個緩衝區大小,做到資料間的平衡是至關重要的。所以說,「量」就是指如何決定緩衝區的大小。

因此,「質」與「量」體現在緩衝區設計的兩個最主要的方面。「質」就是在給定記憶體中,如何劃分乙個或者多個緩衝區,以盡可能將最重要的資料駐留記憶體。換句話說,也就是決定了資料庫需要幾個緩衝池,哪個錶用哪個緩衝池。而「量」就是說需要分配多少記憶體給緩衝池才算合理。

聽起來簡單做起來難,並且我們沒有任何乙個公式能夠告訴你答案。命中率是乙個不錯的東西,但是並沒有乙個指標說95%以上一定是好的,90%以下一定是不好的。這個必須根據使用者需要的業務決定。比如說使用者的資料庫裡面有乙個小表資料量不多(比如幾十萬或者百萬),訪問不是很頻繁,但是每次訪問需要極高的效率,否則會造成業務瓶頸,這樣的話可以考慮使用單獨的緩衝池盛放這些資料。要不然如果這個表和別的表共享緩衝池,則可能該錶在長時間不用後資料被flush出記憶體。

可以想象,使用單獨的大緩衝池管理簡單,所有的資料遵照使用頻繁程度決定是否停留在記憶體裡面。但是當按照使用頻率無法滿足業務需求的時候,可能需要對特定型別的資料使用單獨的緩衝池。

而是不是命中率低就一定需要增大緩衝池呢?也不一定。命中率高低只是現象,其本質是資料在記憶體中的讀寫頻率。有沒有方法在不增減緩衝區大小的情況下調整命中率呢?有啊,比如把某些表移到另外的緩衝池中~~~歸根結底,緩衝區的管理就是什麼資料,多少資料應該駐留記憶體的管理。

非常精闢。。。。

我一直認為只有達到一定境界了,解釋問題才能深入淺出。

緩衝區管理就是在資源有限的情況下,如何把你想留在記憶體的資料盡量留在記憶體中,

這就要靠調節緩衝區的個數和大小來做到。

「質量說」很新穎。。。。

建好索引用好索引,在索引都沒有建立好的情況下,何談緩衝池命中率

緩衝區,

朋友,

總結,

使用者,

標準

DB2的緩衝池 BUFFERPOOL

db2資料庫在執行時會占用不少的系統記憶體。db2按三個級別來管理記憶體 由oss元件向其他元件提供 記憶體集 記憶體池和記憶體塊。記憶體塊組成記憶體池。記憶體池屬於乙個記憶體集。記憶體集裡有多個記憶體池。緩衝池 bufferpool 就其中的一種記憶體池,這型別記憶體池消耗的記憶體數量最大。buf...

DB2緩衝池 表空間

在db2中建立表空間得指向該錶空間所屬緩衝池,否則表空間指向預設緩衝池 1.緩衝池 1.1 建立緩衝池 語法 create bufferpool size pagesize 例項 create bufferpool oliver buffer immediate size 250 pagesize ...

DB2緩衝池 表空間

在db2中建立表空間得指向該錶空間所屬緩衝池,否則表空間指向預設緩衝池 1.緩衝池 1.1 建立緩衝池 語法 create bufferpool size pagesize 例項 create bufferpool oliver buffer immediate size 250 pagesize ...