相克军_Oracle体系_随堂笔记005-Database buffer cache
2017-08-09 17:42
573 查看
本章主要阐述SGA中的Database buffer cache。
Buffer cache {
1.pin (读写瞬间的状态)
2.clean
3.dirty
4.unused
}
--Database buffer cache
概述:
1.段、区、块的概念:
create table t2 (
id int,
name varchar2(30)
);
建立一个表,同时建立一个段,
建立段的同时,会给段分配一个区,
区是物理上连续的几个块。
区是oracle给段分配的最小单位。
块是oracle I/O的最小单位。
insert into t2 values(1,'xiaobei');
访问:
访问一个块,
一般情况下,一个块中有多个行(行链接,行迁移除外)。
![](http://images.cnblogs.com/cnblogs_com/jyzhao/592116/o_%e5%9b%be5-1%ef%bc%9abuffer%20cache.png)
2.buffer cache的意义:
①减少I/O:物理I/O,逻辑I/O
②构造cr块
引入undo:Oracle在修改数据以前,会将数据写到undo中。
undo的作用{
回滚未提交事物;
构造cr块。
}
![](http://images.cnblogs.com/cnblogs_com/jyzhao/592116/o_%e5%9b%be5-2%ef%bc%9a%e4%bc%9a%e8%af%9d1%e5%88%a0%e9%99%a4%e4%b8%80%e8%a1%8c%e6%9c%aa%e6%8f%90%e4%ba%a4%ef%bc%8c%e4%bc%9a%e8%af%9d2%e8%ae%bf%e9%97%ae%e6%ad%a4%e8%a1%a8%e6%95%b0%e6%8d%ae%ef%bc%8c%e5%86%85%e5%ad%98%e7%9a%84%e5%8f%98%e5%8c%96%e3%80%82.png)
这里会引出两个更深入的问题:①会话2如何知道会话1没有提交?②cr块如何从undo空间中找到被删除的那一行。
3.buffer cache的内存组织结构
CBC、LRU、LRUW、CHECKPOINT QUEUE
CBC 按照块地址将buffer链起来。
![](http://images.cnblogs.com/cnblogs_com/jyzhao/592116/o_%e5%9b%be5-3%ef%bc%9aCBC%e9%93%be%e7%a4%ba%e6%84%8f%e5%9b%be.png)
LRU 最近最少使用的顺序链起来。可用块~
LRU,MRU(最近最多使用)
LRUW 脏块的,DBWn以此为标准优先写最近最少使用的脏块。
![](http://images.cnblogs.com/cnblogs_com/jyzhao/592116/o_%e5%9b%be5-4%ef%bc%9abuffer%20cache%e4%b8%adbuffer%e7%9a%844%e7%a7%8d%e7%8a%b6%e6%80%81.png)
CHECKPOINT QUEUE 也是关于脏块的,按块第一次脏的时间点链起来。
![](http://images.cnblogs.com/cnblogs_com/jyzhao/592116/o_%e5%9b%be5-5%ef%bc%9acheckpoint%20queue%20%e9%93%be%e7%9a%84%e7%ae%80%e6%98%93%e5%9b%be.png)
注:在Oracle中,一般都是采用双向的链。
4.DB_WRITER_PROCESSES
5.buffer cache的重要参数配置
6.Block状态
Q:current块和cr块区别?
A:
Q:查看一个对象占用了多少不同状态的buffer?
A:
注:实验的时候可以先执行
7.使用各种sql熟知buffer cache使用情况
OBJECT_NAME DBARFIL DBABLK
-------------------- ---------- ----------
T2 1 86184
T2 1 86185
Q:将buffer cache中占用buffer最多的对象给找出来?
A:
Q:寻找热块
A:
OBJECT FILE# BLOCK# TOUCHES
---------- ---------- ---------- ----------
5847 1 11752 29
5834 1 11664 29
5834 1 11665 29
5832 1 11649 30
5833 1 11657 30
5834 1 11666 31
287 1 2009 45
287 1 2008 45
96 rows selected.
注:块被逻辑读的次数多,就是热端,根据块的tch属性判断。
Q:块的总数
A:
SUM(BLOCKS)
-----------
176640
Q:查询当前空闲空间的比例,最好控制在10%以内
A:
BLOCK STATUS COUNT(*)
---------------------------------------- ----------
BEING USED 74
AVAILABLE 5385
FREE 10696
Q:最浪费内存的前10个语句占所有的比例,建议控制在5%以内
A:
Q:找出消耗物理I/O资源最大的SQL语句
A:
Q:常见的操作系统命令,查看
A:
内存读:消耗CPU资源
物理读:消耗I/O资源
Buffer cache {
1.pin (读写瞬间的状态)
2.clean
3.dirty
4.unused
}
--Database buffer cache
概述:
1.段、区、块的概念:
create table t2 (
id int,
name varchar2(30)
);
建立一个表,同时建立一个段,
建立段的同时,会给段分配一个区,
区是物理上连续的几个块。
区是oracle给段分配的最小单位。
块是oracle I/O的最小单位。
insert into t2 values(1,'xiaobei');
访问:
访问一个块,
一般情况下,一个块中有多个行(行链接,行迁移除外)。
![](http://images.cnblogs.com/cnblogs_com/jyzhao/592116/o_%e5%9b%be5-1%ef%bc%9abuffer%20cache.png)
2.buffer cache的意义:
①减少I/O:物理I/O,逻辑I/O
②构造cr块
引入undo:Oracle在修改数据以前,会将数据写到undo中。
undo的作用{
回滚未提交事物;
构造cr块。
}
![](http://images.cnblogs.com/cnblogs_com/jyzhao/592116/o_%e5%9b%be5-2%ef%bc%9a%e4%bc%9a%e8%af%9d1%e5%88%a0%e9%99%a4%e4%b8%80%e8%a1%8c%e6%9c%aa%e6%8f%90%e4%ba%a4%ef%bc%8c%e4%bc%9a%e8%af%9d2%e8%ae%bf%e9%97%ae%e6%ad%a4%e8%a1%a8%e6%95%b0%e6%8d%ae%ef%bc%8c%e5%86%85%e5%ad%98%e7%9a%84%e5%8f%98%e5%8c%96%e3%80%82.png)
这里会引出两个更深入的问题:①会话2如何知道会话1没有提交?②cr块如何从undo空间中找到被删除的那一行。
3.buffer cache的内存组织结构
CBC、LRU、LRUW、CHECKPOINT QUEUE
CBC 按照块地址将buffer链起来。
![](http://images.cnblogs.com/cnblogs_com/jyzhao/592116/o_%e5%9b%be5-3%ef%bc%9aCBC%e9%93%be%e7%a4%ba%e6%84%8f%e5%9b%be.png)
LRU 最近最少使用的顺序链起来。可用块~
LRU,MRU(最近最多使用)
LRUW 脏块的,DBWn以此为标准优先写最近最少使用的脏块。
![](http://images.cnblogs.com/cnblogs_com/jyzhao/592116/o_%e5%9b%be5-4%ef%bc%9abuffer%20cache%e4%b8%adbuffer%e7%9a%844%e7%a7%8d%e7%8a%b6%e6%80%81.png)
CHECKPOINT QUEUE 也是关于脏块的,按块第一次脏的时间点链起来。
![](http://images.cnblogs.com/cnblogs_com/jyzhao/592116/o_%e5%9b%be5-5%ef%bc%9acheckpoint%20queue%20%e9%93%be%e7%9a%84%e7%ae%80%e6%98%93%e5%9b%be.png)
注:在Oracle中,一般都是采用双向的链。
4.DB_WRITER_PROCESSES
A:
A:
-------------------- ---------- ----------
T2 1 86184
T2 1 86185
A:
A:
---------- ---------- ---------- ----------
5847 1 11752 29
5834 1 11664 29
5834 1 11665 29
5832 1 11649 30
5833 1 11657 30
5834 1 11666 31
287 1 2009 45
287 1 2008 45
96 rows selected.
注:块被逻辑读的次数多,就是热端,根据块的tch属性判断。
A:
-----------
176640
Q:查询当前空闲空间的比例,最好控制在10%以内
A:
---------------------------------------- ----------
BEING USED 74
AVAILABLE 5385
FREE 10696
Q:最浪费内存的前10个语句占所有的比例,建议控制在5%以内
A:
A:
A:
物理读:消耗I/O资源
相关文章推荐
- 相克军_Oracle体系_随堂笔记005-Database buffer cache
- 相克军_Oracle体系_随堂笔记004-shared pool
- 相克军_Oracle体系_随堂笔记006-日志原理
- 相克军_Oracle体系_随堂笔记003-体系概述
- 相克军_Oracle体系_随堂笔记008-存储结构
- 相克军_Oracle体系_随堂笔记011-事物
- 相克军_Oracle体系_随堂笔记001-概述
- 相克军_Oracle体系_随堂笔记014-锁 latch,lock
- 相克军_Oracle体系_随堂笔记016-参数文件及数据库的启动和关闭
- 相克军_Oracle体系_随堂笔记002-基础
- 相克军_Oracle体系_随堂笔记015-网络原理及配置
- 相克军_Oracle体系_随堂笔记 PPT
- 相克军_Oracle体系_随堂笔记013-字符集
- 相克军_Oracle体系_随堂笔记009-检查点队列
- 相克军_Oracle体系_随堂笔记012-undo
- 相克军_Oracle体系_随堂笔记010-SCN
- oracle cache buffer lru chain
- Oracle buffer cache与相关的latch等待事件
- Oracle体系结构及备份(十八)——bg-database
- Oracle体系结构二(学习笔记)