DSI中描述的touch演算法。

wei-xh發表於2010-12-31
純理論介紹,有時間再做實驗。



DSI中描述的touch演算法。
2.jpg


8I以後為了提升效能LRU又分為了LRU MAIN和LRU AUX.
LRU MAIN上存在冷短和熱端。
_db_percent_hot_default        50                   Percent of default buffer pool considered hot
_db_percent_hot_default引數控制了冷端和熱段佔整個列表的百分比。預設是50%。



DSI中描述的touch演算法。
1.jpg


當程式掃描可用塊的時候,先從lru aux找起,如果沒足夠的所需塊,再掃描lru main。這個時候涉及一些演算法,確定那些塊可以被“犧牲掉”。
掃描的話先從LRU MIAN的COLD端的尾部找起。如果發現touch 數字小於_db_aging_hot_criteria,則重用這個buffer.
_db_aging_hot_criteria的值預設為2.
_db_aging_hot_criteria         2                    Touch count which sends a buffer to head of replacement list
假如掃描的塊的touch為10,那麼由於10>_db_aging_hot_criteria,因此不會被“犧牲”,但是會有兩種情況
1)如果_db_aging_stay_count >_db_aging_hot_criteria,那麼得減半這個buffer的toch數。
2)否則,設定這個buffer的touch數為_db_aging_stay_count
因此可以看出_db_aging_stay_count是個變化的值,預設第一次的值是0.
以我們的情況來說,由於0<2,因此將符合條件2,_db_aging_stay_count的值變為10.
_db_aging_stay_count           0                    Touch count set when buffer moved to head of replacement list
假如下一個資料塊的touch數為12,12>_db_aging_hot_criteria,由於此時_db_aging_stay_count 的值已經被修改為10了,因此_db_aging_stay_count >2,符合第一種情況,那麼將這個資料塊的touch數減半,成為6.
還有一個比較重要的引數是_db_aging_touch_time,我們需要簡單瞭解。它代表在達到定義的時間以後,touch數才會被記錄。
預設值是3.例如一個資料塊A三秒內訪問十次,而只會被記錄1次。9秒內訪問10次,被記錄三次。
_db_aging_touch_time           3                    Touch count which sends a buffer to head of replacement list

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22034023/viewspace-683070/,如需轉載,請註明出處,否則將追究法律責任。

相關文章