database buffer cache之我見

zhangsharp20發表於2016-07-10
database buffer cache 透過db_cache_size和SGA_target來控制。

預設值:

If SGA_TARGET is set: If the parameter is not specified, then the default is 0 (internally determined by the Oracle Database). If the parameter is specified, then the user-specified value indicates a minimum value for the memory pool. If SGA_TARGET is not set, then the default is either 48 MB or 4 MB * number of CPUs, whichever is greater

如果sga_target被設定:
db_cache_szie是0,即資料庫自動管理;db_cache_size非0,則就是database_buffer_cache的最小值
如果sga_target沒被設定:
預設是48M或者是4M*cpu的數量,以較高的為準


資料庫透過LRU演算法控制db buffer cache的資料訪問:

buffer touch counts

資料庫會透過使用touch counts計算lru list中各資料緩衝訪問的頻繁度,這個機制確保當某個buffer被繫結的時候增加一個計數器,而不是不停地重新整理lru list中的快取。

當某個buffer被鎖定,資料庫會判斷什麼時候這個buffer的touch counts在最近是否增長了,如果3秒以前計數器增長了,那麼計數器增加,否則就保持原樣,三秒規則在計數很多touch的時候可以阻止pins的爆發增長,比如一個會話插入了幾行資料,但資料庫會認為這是一個touch。

如果一個buffer在lru的冷端,而touch count是高的,那麼就會被該buffer就會被挪到熱端,如果touch count是低的,那麼就會被移出db buffer cache。


Every buffer has an access mode: pinned or free (unpinned). A buffer is "pinned" in the cache so that it does not age out of memory while a user session accesses it. Multiple sessions cannot modify a pinned buffer at the same time.

每個buffer都有一個訪問模式:pinned或者是free。pinned的目的是為了防止使用者會話訪問時被移除記憶體,多個會話不能同時修改被pinned的buffer。

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

相關文章