调整oracle buffer大小,oracle学习笔记 buffer_cache大小的设置及依据



oracle学习笔记  buffer_cache大小的设置及依据

一)先回顾一下

前面讲的buffercache的工作过程和大体的结构原理

磁盘有一堆dbf文件

内存有buffercache

第一步:一个sql语句进来以后

如:select * from t2 where id=1;

首先是serverprocess会拿着这个sql语句去解析

解析的时候会用到cpu资源还会访问rowcache

解析完成以后生成执行计划再存储到librarycache里面去

这时sql语句的第一步解析执行完了

第二步:要执行语句

执行时要访问数据

buffercache结构中一部分为链区,剩下的为buffer

这里面的链单元有地址指向里面的一些buffer

这时oracle首先通过一系列的判断以后

发现要访问的表t2里面id等于1的行

先判断应该在哪个链上

它计算完了以后它发现这个行所在的块应该在某个链上但不见得在这个链上

然后对这个链进行遍历

第一种结果

在这个链上找到了这个block对应的buffer

既然找到了

这时候这个serverprocess直接读这个buffer

不需要到磁盘再去读了

第二种情况

在这个链上没有找到这个block对应的buffer

这时serverprocess就会在buffer里面找到一个可用的块

假设一个块可用

serverprocess把这个block读到可用的buffer块里面去

同时把可用buffer块的相关地址写到对应链单元内

然后把数据接着读出来

整个的,从链上找buffer,找不到时把block读到内存去写到buffer里面去,然后再读buffer

整个过程都是serverprocess做的

再看另外一个语句

update t2 set name=某个值 where id=1;

要修改某个block的某一行

这时同样serverprocess经过解析以后要执行

执行时同样判断

这行所在的块所在的block应该挂在某个链上

这里在链上遍历发现遍历以后确实找到对应的buffer

直接在内存里面修改buffer不须到磁盘上修改

修改完成以后buffer和block就不一致了

这个buffer就成了一个脏的buffer

这个buffer会被挂在LRUW上和CHECKPOINT队列上

而前面select语句结果访问的块是干净的是可用的

它挂在LRU上

刚才最基本的知识都需要掌握

这是我们回顾的内容

二)DBWn进程和buffercache

接下来我们关心很多内容

某个脏块脏了serverprocess并没有把它写回到磁盘上

是一个进程DBWn负责写的,它是系统的一个进程

使用

[oracle@redhat4 ~]$ ps -ef|grep ora

查询当前系统进程中与ora相关的进程

结果中有

oracle    3161     1  0 03:48 ?        00:00:00 ora_dbw0_jiagulun

的一个进程

此进程会把我们的脏块写到磁盘上

dbwn是一个后台进程

serverprocess是一个前台进程

我们的用户送出一个sql语句

serverprocess接到sql语句

整个的从解析到执行到获取这个过程都是serverprocess工作

serverprocess工作时用户一直在等着,工作完了把结果返给用户

用户所执行的sql语句所等待的时间就是serverprocess工作的时间

所以serverprocess是直接面向用户的叫前台进程

我们希望它越快越好

我们就希望serverprocess所做的事情越少越好

将脏块写回磁盘我们没有让serverprocess去做

而是交给一个后台进程DBWn这个进程

它的运行和用户没有关系,它并不影响用户

它执行时用户没有在等待

它在后台周期性执行

1)脏块和DBWn的触发

有很多条件会触发DBWn

1、每隔一段时间DBWn会触发

一般触发不会将整个的所有的脏块全写回磁盘

它会找LRUW链

将冷端的几个脏块写回磁盘

因为冷端意味着不怎么经常被使用

这是第一个每隔一个时间段

每次写的时候写一批不是写所有的

2、没有了干净块

对于干净的和free的块我们可以覆盖可以来使用

现在有一个block要调到内存里面去

找了半天没有找到干净块没有找到可用块

这时也会触发DBWn

DBWn会批量的写一批buffer到磁盘上

写过来的buffer和磁盘的block就一致了

一致以后就可用,这也是一种条件

3、数据库关闭以后

DBWn会把所有的buffer全部写回磁盘

1和2两种情况最多

数据库正常运行期间

1周期性DBWn触发

2当我们的脏缓冲区到一定程度的时候会触发DBWn

还有一种情况

我要在buffer里面找一个可用块的时候

半天都没找着

就是找可用块找的时间太长

虽然链还有剩余,很多剩余块还没有搜索也会中途退出寻找

这里有一个时间的阈值我们叫阀值也可以叫阈值

它也会触发DBWn

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值