關於BUFFER POOL的一些總結
關於BUFFER POOL的一些總結
BUFFER POOL有三個池組成:
BUFFER POOL 、KEEP、RECYCLE組成。這三個池各有自己的演算法來更新存放池中的資料。
BUFFER POOL使用的是LRU演算法來存放資料塊,資料塊會根據訪問的頻率的多
少來決定在這個池中存放的時間。
KEEP使用的一直存放的演算法,將資料一直存放在這個池中,資料不會被清除出池,但是需要說的是所要存放的資料塊應該少於池本身的大小。而且存放的資料塊的內容一般是需要重複訪問的資料塊。
RECYCLE是存放不經常使用的資料塊,也就是說,這個池的演算法是不保留資料塊,當池本身的空間使用完後就會將資料塊清除出去。一般存放大表的資料塊,而這個大表是不經常使用的,或者是一個全表掃描。這裡需要注意的是這個池設計的大小應該是能夠保證在事務完成前所需要的資料塊還在記憶體中。
使用這三個池,我個人認為,應該在體系結構設計階段就應該考慮這個問題,也就是說,在建立表的時候就應該考慮這個問題。之所以使用其他兩個池來快取表中的資料,目的是為了減少BUFFER POOL的老化,KEEP的使用是比較好理解的,就是在記憶體中快取某個經常使用的表的資料。當然也是可以在DEFAULT池中CACHE。
RECYCLE的使用就是不是很好理解了。其實對於一個很大的表,對這個表的訪問是隨機的,而且是不頻繁的,或者對這個表有全表掃描的操作,就可以使用這個池了,因為如果使用在DEFAULT中,勢必造成DEFAULT其他資料的老化。這樣就增加了系統的負擔。
其中,很大的表和不頻繁的訪問是必要條件。但是這個池的使用也是一個雙刃劍,因為假如這個池的大小設計的不合理的話,就是說如果太小,在事務的處理的過程中,所前期讀入到記憶體中的資料塊在事務未完成,而且還需要再次使用的時候被老化了,就需要再次從磁碟上讀出此塊。這樣就會造成效能問題。
關於CACHE的使用
這個設定就是將所需要快取的表的資料塊放置在LRU的最前端,之所以這樣做的目的是為了如對一個大的表進行全表掃描的話,就會將所讀入的資料塊放入DEFAULT中,就會造成這些資料塊的老化。這個主要是針對DEFAULT。對於Oracle推薦使用KEEP,因為KEEP Oracle說是更有效率。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/222350/viewspace-908030/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於Mysql使用的一些總結MySql
- MySql關於鎖的一些總結MySql
- 關於繼承的一些小總結繼承
- 關於EM配置的一些總結
- 關於Oracle塊的一些總結Oracle
- 關於Code Review的一些思考總結View
- 關於Multiple Buffer Pools的一些疑問
- 關於糾結的recycle pool的設定
- 總結關於CPU的一些基本知識
- 關於sqlplus用法的一些總結SQL
- 關於查詢轉換的一些總結
- 關於 變址影像(indexed image) 的一些總結Index
- 關於字元函式的一些應用總結字元函式
- 關於使用者體驗的一些總結
- 關於查詢最佳化的一些總結
- 關於DDD和COLA的一些總結和思考
- 關於學習 Linux 系統結構的一些總結Linux
- vertex buffer 資料結構 如何讀vb的memory pool資料結構
- 關於程式和執行緒 自我的一些總結執行緒
- 關於分割槽表Local索引Rebuild的一些總結索引Rebuild
- SHARED POOL總結
- 關於近期的總結
- 關於UIWebView的總結UIWebView
- 關於BeautifulSoup的總結
- 關於HTML的總結HTML
- 關於學習-Linux-系統結構的一些總結Linux
- 微信小程式關於分享一些簡單總結微信小程式
- 關於前端工程化(基建)的一些總結和思考前端
- 關於集合中一些常考的知識點總結
- android 關於記憶體優化的一些總結Android記憶體優化
- 關於程式碼質量度量和分析的一些總結
- 關於電腦(window)後門檢視的一些總結
- 關於個人開源專案(vue app)的一些總結VueAPP
- NIO(五)Buffer總結
- MySQL 引擎特性:InnoDB Buffer PoolMySql
- sqlserver關於always on的總結SQLServer
- mysql關於variable的總結MySql
- ORACLE關於NULL的總結OracleNull