1. 理解cache buffer中几个关键性的概念
Oracle SGA的主要结构就是cache buffer,其通常会占据整个SGA的大部分内存,对于OLTP架构而言。 理解cache buffer之前,我们需要
先理解其涉及的几个概念。
1) 链表(双向链表)
2) hash操作
3) bucket
从图中我们可以看到,一个latch:cache buffers chains(x$bh.hladdr) 可以保护多个Hash Bucket,也就是说,如果我要访问某个block,我首先要获得这个latch,
一个Hash Bucket对应一个Hash Chain List,
而这个Hash Chain List挂载了一个或者多个Buffer Header。
++++ 9.2.0.8
SQL&get; show parameter db_block_hash
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
_db_block_hash_buckets integer 15667
_db_block_hash_latches integer 1024
大家可以看到,9208中默认的bucket是比较多的,高达15667个,latch是1024,换句话讲,每个latch可以保护16个buckets。
++++10.2.0.5
SQL&get; show parameter db_block_hash
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
_db_block_hash_buckets integer 65536
_db_block_hash_latches integer 2048
SQL&get;
在10.2.0.5版本中,默认是buckets个数是64k,latch是2048个,即每个latch可以保护32个 bucket,这比9208版本高 了一倍。
++++11.2.0.2
SQL&get; show parameter db_block_hash
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
_db_block_hash_buckets integer 262144
_db_block_hash_latches integer 8192
在11.2.0.2 版本中,默认参数值又有所改变,但是仍然是一个latch保护32个bucket。bucket越多,其实可以进一步降低争用,对于高并发环境来讲。
buffer cache原理
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
深入学习cache--思考篇
ARMv8/ARMv9架构精选系列
v8 v9 个人博客 -
Python手写TTL Cache(带过期自动淘汰功能)
用Python实现了一个支持过期时间、带过期自动淘汰功能的Cache
Python TTL Cache -
Oracle Buffer Cache 原理
一. 官网说明Memory Arhat holds copies
buffer cache oracle list statistics -
Buffer Cache详解
Buffer Cache概述众所周知,读取磁盘的速度相对来说是非常慢的,而读取内存的速度相对则要快得多。因此为了能够加
运维 数据库 数据结构与算法 数据块 oracle