本章主要阐述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
SQL> show parameter writer

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_writer_processes integer 1
SQL> alter system set db_writer_processes = 2 scope=spfile;
--DBWn数量一般设定是服务器核心数/8.
 
5.buffer cache的重要参数配置
alter system set db_cache_size=200m scope=both;
设置顺序:
sga_max_size
sga_target
db_cache_size
在OLTP系统中,buffer cache的大小一般设置为sga_max_size的2/3.
DB_CACHE_SIZE = SGA_MAX_SIZE/2 ~ SGA_MAX_SIZE*2/3
使用advice来确认buffer cache的大小
根据语句查询buffer cache该设置多大合适。减少I/O(物理读次数)
平日注意收集积累一些常用的语句》。
 
6.Block状态
buffer header:
SQL> desc x$bh state:0~8
0,free
1,XCUR
2,SCUR
3,CR
4,READ 从block写入buffer的那个过程
5,MREC
6,IREC
7,write
8,pi SQL> select distinct state from x$bh;
非RAC环境下,current永远等于xcur。
RAC下,有scur
 
Q:current块和cr块区别?
A:
cr块被构造后被读出,就马上没意义了。。马上就可以被覆盖了。。
要修改一个块,只能修改current块。

Q:查看一个对象占用了多少不同状态的buffer?

A:

select
o.object_name,
decode(state,0,'free',1,'xcur',2,'scur',3,'cr',4,'read',5,'mrec',
6,'irec',7,'write',8,'pi') state,
count(*) blocks
from x$bh b, dba_objects o
where b.obj = o.data_object_id
and o.object_name = 'T2'
group by o.object_name, state
order by blocks desc
注:实验的时候可以先执行

alter system flush buffer_cache;
 
7.使用各种sql熟知buffer cache使用情况
select distinct object_name, dbarfil, dbablk from x$bh a, dba_objects b
where a.obj=b.object_id and object_name='T2';
OBJECT_NAME             DBARFIL     DBABLK
-------------------- ---------- ----------
T2                            1      86184
T2                            1      86185
select object_name, dbarfil, dbablk from x$bh a, dba_objects b
where a.obj=b.object_id and object_name='T2';
Q:将buffer cache中占用buffer最多的对象给找出来?
A:

select
o.object_name,
decode(state,0,'free',1,'xcur',2,'scur',3,'cr',4,'read',5,'mrec',
6,'irec',7,'write',8,'pi') state,
count(*) blocks
from x$bh b, dba_objects o
where b.obj = o.data_object_id and state<>0
group by o.object_name, state
order by blocks asc;
Q:寻找热块
A:

select
obj object,
dbarfil file#,
dbablk block#,
tch touches
from x$bh
where tch>10
order by
tch asc;
    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属性判断。
select object_name, dbarfil, dbablk from x$bh a, dba_objects b
where a.obj=b.object_id and dbarfil=1 and dbablk=287
Q:块的总数
A:

select sum(blocks) from dba_data_files;
SUM(BLOCKS)
-----------
     176640
 
Q:查询当前空闲空间的比例,最好控制在10%以内
A:

select decode(state,0,'FREE',1,decode(lrba_seq,0,'AVAILABLE','BEING USED'),3,'BEING USED', state) "BLOCK STATUS",count(*)
from x$bh
group by decode(state,0,'FREE',1,decode(lrba_seq,0,'AVAILABLE','BEING USED'),3,'BEING USED',state);

BLOCK STATUS                               COUNT(*)

---------------------------------------- ----------
BEING USED                                       74
AVAILABLE                                      5385
FREE                                          10696
Q:最浪费内存的前10个语句占所有的比例,建议控制在5%以内
A:

select sum(pct_bufgets) "Percent"
from (select rank() over (order by buffer_gets desc) as rank_bufgets, to_char(100 * ratio_to_report(buffer_gets) over(),'999.99')pct_bufgets from v$sqlarea)
where rank_bufgets < 11;
Q:找出消耗物理I/O资源最大的SQL语句
A:

select disk_reads, substr(sql_text,1,4000)
from v$sqlarea
order by disk_reads asc;
Q:常见的操作系统命令,查看
A:
iostat 1 10
vmstat 1 10
mpstat 1 10
mpstat -P 0 1
mpstat -P 1 1
top
free
内存读:消耗CPU资源
物理读:消耗I/O资源

相克军_Oracle体系_随堂笔记005-Database buffer cache的更多相关文章

  1. 相克军_Oracle体系_随堂笔记002-基础

    1.常见的Oracle生产库环境: 图2-1可以说是标准的生产库环境,处处体现了冗余,有效防止了单点故障.这就是HA(高可用) 而且冗在某种条件下还可以去掉,平常实现同时运行提供服务,如果一台坏掉,另 ...

  2. 相克军_Oracle体系_随堂笔记001-概述

    一.Oracle官方支持 1.在线官方文档 http://docs.oracle.com/ 2.metalink.oracle.com,如今已经改成:http://support.oracle.com ...

  3. 相克军_Oracle体系_随堂笔记003-体系概述

    1.进程结构图 对Oracle生产库来讲,服务器进程(可以简单理解是前台进程)的数量远远大于后台进程.因为一个用户进程对应了一个服务器进程. 而且后台进程一般出问题几率不大,所以学习重点也是服务器进程 ...

  4. 相克军_Oracle体系_随堂笔记004-shared pool

    本章主要阐述SGA中的shared pool. Shared pool { 1.free 2.library cache(缓存sql语句及其执行计划) 3.row cache(数据字典缓存) }   ...

  5. 相克军_Oracle体系_随堂笔记006-日志原理

    简单来说,学习Oracle数据库就两个目标: 保证数据库数据的一致性: 提高数据库的性能(这个和日志没关系).   日志的功能:     只是保证数据库数据的一致性:   1.Oracle日志原理   ...

  6. 相克军_Oracle体系_随堂笔记007-PGA

    实际工作中,Oracle中有两个很重要:Server Process 和 PGA.   PGA内存作用和构成   1.PGA作用 2.PGA构成 1)private SQL area   2)Sess ...

  7. 相克军_Oracle体系_随堂笔记008-存储结构

    控制文件.数据文件.日志文件    放在存储上.   参数文件:数据库启动时读取,并不关闭,但是启动过后丢了也没事.一般放在服务器上. $ORACLE_HOME/dbs下   备份文件{     控制 ...

  8. 相克军_Oracle体系_随堂笔记009-检查点队列

    1.检查点队列 checkpoint queue RBA 日志块地址 redo block address LRBA 第一次被脏的地址 HRBA 最近一次被脏的地址 on disk rba 重做日志( ...

  9. 相克军_Oracle体系_随堂笔记010-SCN

    1.SCN的意义?system change number     时间    先后.新旧 select dbms_flashback.get_system_change_number, SCN_TO ...

随机推荐

  1. hadoop生态圈介绍

    原文地址:大数据技术Hadoop入门理论系列之一----hadoop生态圈介绍   1. hadoop 生态概况 Hadoop是一个由Apache基金会所开发的分布式系统基础架构. 用户可以在不了解分 ...

  2. java.net.ConnectException: Connection timed out

    原因可能如下: (1)生成的WSDL的IP地址是不是服务器的IP: (2)代码中是否需要代理,若否,取消代理,若是,设置代理:

  3. python 使用__neg__和__iter__

    __neg__ python中 __neg__ 方法对应于 符号 - 可见 str 没有__neg__,定义 strnew 好吧,无法再简化了 __iter__ 看看 list 的 __iter__: ...

  4. 用C语言编写生成小学四则运算程序

    使用软件——VS 2015 使用环境——C语言 早在上周我就开始使用C#语言做,由于最后一点问题而放弃,之后用C语言开始做,很顺利,但是也碰到了一些问题,但是通过了百度文库上的一些程序的借鉴和吴阿平同 ...

  5. [译]MVC网站教程(一):多语言网站框架

    本文简介 本博文介绍了 Visual Studio 工具生成的 ASP.NET MVC3 站点的基本框架:怎样实现网站的语言的国际化与本地化功能,从零开始实现用户身份认证机制,从零开始实现用户注册机制 ...

  6. C++高精度计时器——微秒级时间统计

    在C++中,经常需要通过计时来统计性能信息,通过统计的耗时信息,来分析性能瓶颈,通常情况下,可能毫秒级别的时间统计就足够用了,但是在毫厘必争的性能热点的地方,毫秒级别的统计还是不够的,这种情况下,就需 ...

  7. 实现Div拖拽

    直观的理解div拖拽:当鼠标对着可拖拽部分按住后并拖动,div会跟着鼠标一起运动,并且其运动空间限制在浏览器内部,当放开鼠标时,则div停止运动. 实现div拖拽需要三个重要的事件: (1)onmou ...

  8. 用python实现的百度音乐下载器-python-pyqt-改进版

    之前写过一个用python实现的百度新歌榜.热歌榜下载器的博文,实现了百度新歌.热门歌曲的爬取与下载.但那个采用的是单线程,网络状况一般的情况下,扫描前100首歌的时间大概得到40来秒.而且用Pyqt ...

  9. Html5 布局方式

    在Html5之前,统一采用的是Div+css的方式进行布局,但是却和开发人员的命名方式,喜好有关.在新的Html5中,布局却显得更加人性化,更易理解了.如增加了Header,Footer,Sectio ...

  10. struts1二:基本环境搭建

    首先建立一个web项目 引入需要的jar包 建立包com.bjpowernode.struts创建LoginAction package com.bjpowernode.struts; import ...