共享池 LRU鏈

2021-06-24 18:08:49 字數 915 閱讀 5661

1、lru鏈

lru鏈存放了sql和sql執行計畫,如果共享池空間比較緊張,一些sql與執行計畫就會被釋放掉。只有recreate型別thunk才會被鏈結到lru鏈上,lru鏈上沒有freeable型別thunk。recreate與freeable型別thunk大都是子堆對應的thunk,子堆裡主要存放了sql語句。正在執行的sql語句的thunk是不會被鏈到lru上的,等執行完了會被鏈到lru上。

2、lru煉圖

沒有把recreate與freeable型別的放在一條鏈上,這樣的設計結構減小了lru鏈長度,加快了搜尋速度。

當sql語句被執行以以後會被掛到lru鏈上,在lru鏈上的thunk必須為recreate型別。如果sql比較大需要多個thunk,則在其recreate thunk上再掛乙個freeable的thunk(如果需要4個thunk就再掛3個freeable的thunk)

3、lru鏈上thunk的釋放

以下面圖為例

當執行乙個sql語句(需要8k空間),沒有可用空間時,oracle要覆蓋這個子堆時,會先覆蓋掉thunk 0,然後thunk 1。剩下的thunk 2,3會鏈到freeliist上。

當執行乙個sql語句(需要24k)時,沒有可用空間,oracle會覆蓋掉這個子堆,並且再覆蓋乙個子堆,拿另乙個子堆的8k空間,另乙個子堆的其他thunk會被掛到freelist上。

redis 共享物件池

當資料為0 9999的整數時 默使用物件池。可以通過 object refcount 檢視物件引用數。127.0.0.1 6379 set intx 5 ok127.0.0.1 6379 object refcount intx 直接使用共享物件池內的整數物件。引用數是2。否則為1。integer ...

redis 共享物件池

當資料為0 9999的整數時 默使用物件池。可以通過 object refcount 檢視物件引用數。127.0.0.1 6379 set intx 5 ok127.0.0.1 6379 object refcount intx 直接使用共享物件池內的整數物件。引用數是2。否則為1。integer ...

LRU在MySQL快取池的實現

mysql的innodb引擎設定有索引及資料快取池,其中用到的lru演算法來維持快取的命中率 這裡用到了順序表list來作為緩衝池,每個資料節點稱為block 該演算法採用 中點插入法 當插入乙個新block時,移除表尾最近最少使用的block,在中點插入新block。這個中點將鍊錶分為兩部分 1....