设为首页 加入收藏

TOP

oracle cache buffer lru chain(一)(四)
2014-11-24 07:36:44 来源: 作者: 【 】 浏览:3
Tags:oracle cache buffer lru chain
00d8=>0x6d3f0208=>0x6d3f0338=>0x6d3f0598=>0x6d3f06c8=>0x6d3f07f8
0x6d3f0928=>0x6d3f0a58=>0x6d3f0b88=>0x6d3f0cb8=>0x6d3f0de8=>0x6d3f0f18=>0x6d3f1048=>0x6d3f1178
0x6d3f12a8=>0x6d7eeb78=>0x6d7eeca8=>0x6d7eedd8=>0x6d7eef08=>0x6d7ef038=>0x6d7ef168=>0x6d7ef298
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
CHAIN: 0 LOC:0x76d3bd50 HEAD: [NULL]
CHAIN: 1 LOC:0x76d3bd60 HEAD: [NULL]
CHAIN: 2 LOC:0x76d3bd70 HEAD: [0x6c7fa698,0x6c7fa698]
BH (0x6c7fa5e8) file#: 1 rdba: 0x0040fc5c(1/64604) class: 1 ba: 0x6c7a0000
set: 75 pool 3 bsz: 8192 bsi: 0 sflg: 2pwc: 14,28
dbwrid: 14 obj: 2 objn: 4 tsn: 0 afn: 1hint: f
hash: [0x76d3bd70,0x76d3bd70] lru:[0x6c7fa5a0,0x6c7fa800]
lru-flags: debug_dump moved_to_tail
ckptq: [NULL] fileq: [NULL] objq:[0x6c7fa828,0x6c7fa5c8]
st: XCURRENT md: NULL tch: 1
flags: only_sequential_access
LRBA: [0x0.0.0] LSCN: [0x0.0] HSCN:[0xffff.ffffffff] HSUB: [65535]
cr pin refcnt: 0 sh pin refcnt: 0
。。。。。。。。。。。。。。。。。。。。。。。
Ws:就是工作集,oracle把所有链表按照功能不同分为很多ws,每个ws都有一个wsid这就是工作集编号。另外还可以看到有AUXILIARY,这是在数据库初始化的时候分配buffer到该链表,然后数据库搜free memory 就在这个链表开始,把分配空间的链表内容在放到main 链表上,从而搜索空位置在auxiliary list开始,dbwr搜索dirty list从main链开始,提高了效率。我们熟知的checkpoint queue存在于shared pool中
SQL> select* from v$sgastat where name like '%Checkpoint%';
POOL NAME BYTES
-------------------------------------- ----------
sharedpool Checkpoint queue 6159360
SQL>
另外没个链表都被latch保护,常见的就是cachebuffer lru chain。
在此先看一下v$latch视图。
Latch请求分为两类:
1. 一类为:willing-to-wait,也就是说,请求latch如果请求不到,那么先歇会,到达一定时间在去请求,直到请求到该latch。在misses字段记录了请求失败的次数,失败一次该值加1.
2. 另一类为:immedate,也就是说当进行latch请求的时候,请求道最好,如果请求不到那么程序会继续下去,immedate_misses记录了该请求失败的次数。
另外还有spin_gets,也就是说,当在willing-to-wait模式下,第一次请求latch失败,但是在之后请求都成功的次数。
Wait_time;请求latch等待的时间。单位为:微妙(inmicroseconds)
Sleeps:Number oftimes a willing-to-wait latch request resulted in a session sleeping whilewaiting for the latch,成功获取latch前sleep多少次。
好了,我们可以通过v$latch视图确认,是否buffercache存在latch竞争问题:
Eg:
SQL> setlinesize 200
SQL> r
1* selectname,gets,misses,sleeps,immediate_gets,immediate_misses,wait_time from v$latchwhere name like '%cache buffer%'
NAME GETS MISSES SLEEPS IMMEDIATE_GETS IMMEDIATE_MISSES WAIT_TIME
-------------------------------------------------------------------------- ---------- ---------- -------------- ---------------- ----------
cache bufferslru chain 9863 0 0 21850 0 0
cache bufferschains 426674 0 0 138947 0 0
cache bufferhandles 984 0 0 0 0 0
SQL>
可以看到有三个latch,一个为cachebuffer lru chain,一个为cache buffers chains另一为cache bufferhandles;
先看第一个:
当用户进程需要读取数据到buffercache的时候,就需要扫描lru list,但是这个buffer cache是共享的,因此必须有一个latch进行保护,因此就需要锁定内存结构,防止并发修改破坏数据,对于数据库的访问,bu
首页 上一页 1 2 3 4 5 下一页 尾页 4/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇oracle sql语言模糊查询?通配符 下一篇Buffer Cache(缓冲区缓存)篇:..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·HyperText Transfer (2025-12-26 07:20:48)
·半小时搞懂 HTTP、HT (2025-12-26 07:20:42)
·CPython是什么?PyPy (2025-12-26 06:50:09)
·Python|如何安装seab (2025-12-26 06:50:06)
·python要学习数据分 (2025-12-26 06:50:03)