cache buffers chains vs cache buffers lru chain
http://luckysea.itpub.net/post/5481/323246
cache buffers chains當一個資料塊讀入sga區,相應的buffer header會被放置到hash列表上,我們稱其這hash chains,chain在中文的意為鏈條或串的意思,表達就是關連性.如果一個程式想訪問或修改hash chain上的block,它首先要獲得"cache buffers chains" latch。
cache buffers chains latch等待高大體有兩個方面:
1、寫的比較差的sql
cache buffers chains latch很大程度與邏輯讀有關,所以要觀注v$sql中BUFFER_GETS/EXECUTIONS大的語句。
同時每一個邏輯讀需要一個latch get 操作及一個cpu操作,這樣的sql也會很耗cpu資源。
2、熱塊
即多個程式讀同一個或幾個block的狀況,這要考慮應用的設計了,為什麼會出現這樣的情況,改善可以這樣:
聯合v$session_wait及x$bh檢視找到相應的熱塊程式最佳化
示例sql
程式碼:--------------------------------------------------------------------------------
SELECT A.HLADDR, A.FILE#, A.DBABLK, A.TCH, A.OBJ, B.OBJECT_NAME
FROM X$BH A, DBA_OBJECTS B
WHERE (A.OBJ = B.OBJECT_ID OR A.OBJ = B.DATA_OBJECT_ID)
AND A.HLADDR = &P1RAW
UNION
SELECT HLADDR, FILE#, DBABLK, TCH, OBJ, NULL
FROM X$BH
WHERE OBJ IN (SELECT OBJ
FROM X$BH
WHERE HLADDR = &P1RAW
MINUS
SELECT OBJECT_ID
FROM DBA_OBJECTS
MINUS
SELECT DATA_OBJECT_ID FROM DBA_OBJECTS)
AND HLADDR = &P1RAW
ORDER BY 4;--------------------------------------------------------------------------------
改變熱塊的途徑就是儘量讓一個block存少一些資料,比如加大pctfree引數.同時化化應用分散熱塊很重要。
cache buffers lru chain
這也是一個記憶體結構,用於標識哪些buffer操作狀態的,比如哪些是"髒資料"需要DBWn回寫到資料檔案。可以適當加大_DB_BLOCK_LRU_LATCHES及提升DBWn的寫速度得以解決。
cache buffers lru chain多也是bad sql語句的一個徵兆,表明了buffer cache操作很頻繁。比如做全表掃描或重複的掃描一個選擇性很差的索引都會造成cache buffers lru chain的競爭。透過v$session_wait,v$session,v$sqltext找到相關的語句進行最佳化也很必要。
[@more@]來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10599713/viewspace-1004135/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 用於排查cache buffers chainsAI
- Oracle Cache Buffer ChainsOracleAI
- PostgreSQL的shared_buffers和系統OS cache的關係SQL
- Leetcode LRU CacheLeetCode
- Indirect Buffers
- Protocol Buffers 系列 (1) - 什麼是Protocol Buffers?Protocol
- LRU cache原理及go實現Go
- 動手實現一個 LRU cache
- LRU cache快取簡單實現快取
- 用 Go 實現一個 LRU cacheGo
- Protocol Buffers 3 學習Protocol
- PostgreSQL的wal_buffersSQL
- LRU Cache的原理和python的實現Python
- Android快取機制-LRU cache原理與用法Android快取
- Python 的快取機制: functools.lru_cachePython快取
- 通過原始碼學習@functools.lru_cache原始碼
- Python 中 lru_cache 的使用和實現Python
- PostgreSQL DBA(89) - Linux(Buffer vs Cache)SQLLinux
- 從 LRU Cache 帶你看面試的本質面試
- Protocol Buffers 在 iOS 中的使用ProtocoliOS
- library cache pin和library cache lock(一)
- library cache pin和library cache lock (zt)
- library cache pin和library cache lock(二)
- Guava CacheGuava
- Spring CacheSpring
- 【linux】free命令中cached和buffers的區別Linux
- Linux free 命令中cached 和 buffers 的區別Linux
- python自帶快取lru_cache用法及擴充套件(詳細)Python快取套件
- Service Worker Cache 和 HTTP Cache 的區別HTTP
- MySQL:Table_open_cache_hits/Table_open_cache_misses/Table_open_cache_overflowsMySql
- Library Cache最佳化篇(一)降低library cache lock和library cache pin的方法
- PWA(Progressive Web App)入門系列:Cache Storage & CacheWebAPP
- library cache lock和library cache bin實驗_2.0
- 【Cache】將常用的“小表”快取到Buffer Cache快取
- Client Side Cache 和 Server Side Cache 的區別clientIDEServer
- 還在用JSON? Google Protocol Buffers 更快更小 (實踐篇)JSONGoProtocol
- 還在用JSON? Google Protocol Buffers 更快更小 (原理篇)JSONGoProtocol
- Python 在Python中使用Protocol Buffers基礎介紹PythonProtocol
- 谷歌將在 Kotlin 中支援 Protocol Buffers 資料格式谷歌KotlinProtocol