您的位置:首页 > 数据库 > Oracle

相克军_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');
访问:
访问一个块,
一般情况下,一个块中有多个行(行链接,行迁移除外)。



2.buffer cache的意义:
①减少I/O:物理I/O,逻辑I/O
②构造cr块

引入undo:Oracle在修改数据以前,会将数据写到undo中。
undo的作用{
回滚未提交事物;
构造cr块。
}



这里会引出两个更深入的问题:①会话2如何知道会话1没有提交?②cr块如何从undo空间中找到被删除的那一行。

3.buffer cache的内存组织结构
CBC、LRU、LRUW、CHECKPOINT QUEUE
CBC 按照块地址将buffer链起来。



LRU 最近最少使用的顺序链起来。可用块~
LRU,MRU(最近最多使用)
LRUW 脏块的,DBWn以此为标准优先写最近最少使用的脏块。



CHECKPOINT QUEUE 也是关于脏块的,按块第一次脏的时间点链起来。



注:在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资源
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: