db2 的緩衝池設計

 

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

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

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

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

緩衝池的作用是把數據臨時存放在內存中,避免物理讀寫
因此,假設用戶使用64位實例,也就是邏輯內存基本沒有限制的情況下,如何用有限的物理內存跟有效地存取海量數據,這個是緩衝池設計的關鍵。

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

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

因此,“質”與“量”體現在緩衝區設計的兩個最主要的方面。“質”就是在給定內存中,如何劃分一個或者多個緩衝區,以儘可能將最重要的數據駐留內存。換句話說,也就是決定了數據庫需要幾個緩衝池,哪個表用哪個緩衝池。而“量”就是說需要分配多少內存給緩衝池纔算合理。

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

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

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

 

非常精闢。。。。
我一直認爲只有達到一定境界了,解釋問題才能深入淺出。
緩衝區管理就是在資源有限的情況下,如何把你想留在內存的數據儘量留在內存中,
這就要靠調節緩衝區的個數和大小來做到。
“質量說”很新穎。。。。

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


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章