数据读取之逻辑读简单解析--关于BUFFER CACHE

标签: 数据 逻辑 解析 | 发表时间:2013-12-05 21:55 | 作者:q947817003
出处:http://blog.csdn.net
数据读取之逻辑读简单解析--BUFFER CACHE

一、实验数据准备--查出一条数据的ROWID,及FILE_ID,BLOCK_ID等信息

BYS@ bys3>select rowid,test.* from test where rownum=1;
ROWID              OBJECT_NAME   OBJECT_ID STATUS
------------------ ------------ ---------- -------
AAAFSJAAEAAAACrAAA UNDO$                15 VALID
使用下面语句查出相应行的FILE_ID,BLOCK_ID,关于ROWID,详见:http://blog.csdn.net/q947817003/article/details/11490051
col object_name for a12
col colname for a10
select a.rowid,a.object_id,a.file_id,a.block_id,a.row_num,b.object_name,a.colname from
(select rowid,
dbms_rowid.rowid_object(rowid) object_id,
dbms_rowid.rowid_relative_fno(rowid) file_id,
dbms_rowid.rowid_block_number(rowid) block_id,
dbms_rowid.rowid_row_number(rowid) row_num,
&colname as colname from &tablename t) a,
dba_objects b
where a.object_id=b.object_id;
运行上述语句,按提示输入:&colname 列名 ;&tablename 表名即可显示类似以下信息:  我这里是输入 test 表的object_name列
ROWID               OBJECT_ID    FILE_ID   BLOCK_ID    ROW_NUM OBJECT_NAME  COLNAME
------------------ ---------- ---------- ---------- ---------- ------------ ----------
AAAFSJAAEAAAACrAAD      21641          4        171          3 TEST         I_USER1
AAAFSJAAEAAAACrAAC      21641          4        171          2 TEST         CON$
AAAFSJAAEAAAACrAAB      21641          4        171          1 TEST         ICOL$
AAAFSJAAEAAAACrAAA      21641          4        171          0 TEST         UNDO$
#############################

二、关于BH buffer header,buckets,block_buffers介绍:  --可结合下面图1对比

1.概念介绍

HASH BUCKET  在共享池中    一种数据结构-数组,双向链表,指针指向BH;正常情况下,buckets的数量大约是block_buffers的两倍多
BH :buffer header 存放有文件号 block#等摘要信息,与数据块头的信息类似功能。BH buffer header----block_buffers块个数是一一对应的,事实上相等。BH buffer header的大小在我的实验环境是264byte,9I据说是 188byte
CBC   :多个BH组成 Cache Buffer Chain (CBC)   --一般情况下一个
buffers block是BUFFER CACHE中存放数据库具体数据的块--默认8K-等于数据库块
数据读取方式:BUFFER CACHE中一次只能读一块;磁盘上可以一次读多个连续的块

2.BH buffer header,buckets,block_buffers个数查询:

SYS@ bys3>show parameter db_cache_s
NAME                                 TYPE        VALUE
------------------------------------ -----------
db_cache_size                        big integer 48M
如果是动态SGA管理,应该查:select * from v$sga_dynamic_components;
SYS@ bys3>show parameter db_block_s
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_block_size                        integer     8192
需要使用到的查询语句:
[oracle@bys3 admin]$ pwd    ---存放在$ORACLE_HOME的/rdbms/admin目录下
/u01/app/oracle/product/11.2.0/dbhome_1/rdbms/admin
[oracle@bys3 admin]$ cat show_para.sql   脚本具体内容如下:感谢guoyJoe大师的脚本哈哈
col p_name for a40
col p_DESCRIPTION for a50
col p_value for a30
set linesize 10000
SELECT i.ksppinm p_name, i.ksppdesc p_description, CV.ksppstvl p_VALUE, CV.ksppstdf isdefault, DECODE (BITAND (CV.ksppstvf, 7),1, 'MODIFIED',4, 'SYSTEM_MOD', 'FALSE') ismodified, DECODE (BITAND (CV.ksppstvf, 2), 2, 'TRUE', 'FALSE') isadjusted
FROM sys.x$ksppi i, sys.x$ksppcv CV
WHERE i.inst_id = USERENV ('Instance') AND CV.inst_id = USERENV ('Instance') AND i.indx = CV.indx AND upper(i.ksppinm) LIKE upper('%&p%') ORDER BY REPLACE (i.ksppinm, '_', '');
运行此脚本,查询隐含参数:
SYS@ bys3>@?/rdbms/admin/show_para
Enter value for p: hash_buckets
_db_block_hash_buckets   16384   -两个8192大小
Enter value for p: block_buffers
_db_block_buffers   5952     
重启后依然是这个值
#############################

3.BH buffer header大小

BH buffer header----block_buffers块个数是一一对应的,事实上相等
BH的大小计算-- 即db_cache_size的大小减去block_buffers*8K   --这里数据库的默认块大小是8K
SYS@ bys3>select (48*1024-5952*8)*1024/5952 abytes from dual;
    ABYTES
----------
264.258065    --这里是264byte,9I据说是 188byte.
#############################


三.结合图1,解析发出查询语句,ORACLE如何读数据?

select a from b where rownum=1;语句发出后,
-->>首先查出第一行数据的ROWID--使用有dbms_rowid.ROWID_BLOCK_NUMBER(rowid),
-->>根据ROWID得出DBA
-->>到SGA中BUFFER CACHE查找此数据。      
-->>首先把DBA信息使用内部HASH函数进行运算
-->>根据生成值找到相应HASH BUCKER(包含首、尾BH地址)  --共享池
-->>BH buffer header --内部表x$bh,在BH中找到BA信息 buffer address
-->>根据BH中的BA信息,就找到了BUFFER CACHE中存放所要查询数据块具体数据的内存块
-->>返回数据至相应的查询进程;一次逻辑读到此完成。

作者:q947817003 发表于2013-12-5 13:55:44 原文链接
阅读:90 评论:0 查看评论

相关 [数据 逻辑 解析] 推荐:

数据读取之逻辑读简单解析--关于BUFFER CACHE

- - CSDN博客数据库推荐文章
数据读取之逻辑读简单解析--BUFFER CACHE. 一、实验数据准备--查出一条数据的ROWID,及FILE_ID,BLOCK_ID等信息. 使用下面语句查出相应行的FILE_ID,BLOCK_ID,关于ROWID,详见:http://blog.csdn.net/q947817003/article/details/11490051.

从逻辑规则到数据驱动——人工智能杂谈

- - 弯曲评论
传统的人工智能的书,翻开书前几章基本都会讲谓词演算等逻辑推理的方法,甚至有的人工智能的书花了大量篇幅就在讲这个东西. 一方面,这可以看出,早期的人工智能是基于规则与逻辑的,另一方面,这其实也是一种误导. 因为现在的人工智能被机器学习所主导,机器学习与传统的人工智能很不同,现在的机器学习很大程度上都是数据驱动的,因此当初我看规则与逻辑推理后,却不知道能做什么,什么专家系统的都太遥远.

浅谈大数据平台基建的逻辑

- - 透明思考
这篇文章主要目的是面向初接触大数据的朋友简单介绍大数据平台基础建设所需要的各个模块以及缘由. 按照 Ralph Hughes的观点,企业数据仓库参考架构由下列几层构成:. 接入层(Landing):以和源系统相同的结构暂存原始数据. 整合层(Integration):持久存储整合后的企业数据,针对企业信息实体和业务事件建模,代表组织的“唯一真相来源”.

java解析xml数据---sax解析器

- - ITeye博客
下面是handler解析数据的方法. private HashMap map = null;// 存储单个解析的完整对象. private List> list = null;// 存储全部的解析对象. private String currentTag = null; // 正在解析的元素的标签.

Android--用JSON解析数据

- - CSDN博客移动开发推荐文章
gson-1.7.1.jar,Gson在Android3.0以上才能直接使用,在3.0以下想使用可以从外部导入jar包. 下载链接: http://download.csdn.net/detail/zlqqhs/5075995. 新建工程,新建一个libs文件夹,将gson-1.7.1.jar复制到libs文件夹中.

逻辑入门

- snowflip - Pure Pleasure - Reborn
你好,笑来,我想我问关于逻辑学方面的书籍有什么比较值得推荐的吗. 其实,我总觉得很多人缺的不是逻辑训练,而是“自省”训练,以及“道义”教育. Beyond Feelings,这是我当年的启蒙书籍(是我边读边敲做成电子版的). 想明白(系列)分类里的文章,建议你看看. TTC出过一个24讲的”Argumentation”,到Google上搜索“TTC+Argumentation”就可以找到.

Google的GSON框架解析JSON数据

- - JavaScript - Web前端 - ITeye博客
JSON即JavaScript Object Natation, 它是一种轻量级的数据交换格式, 与XML一样, 是广泛被采用的客户端和服务端交互的解决方案. JSON中对象(Object)以"{"开始, 以"}"结束. 对象中的每一个item都是一个key-value对, 表现为"key:value"的形式, key-value对之间使用逗号分隔.

苹果的逻辑

- Jacky - It Talks-魏武挥的blog
玩iPad也有大半年了,有一件事我一直不会,那就是删应用. 我知道长按一个图标会出现一个大叉,点击这个大叉能有“删除”的功能. 但我一直疑惑的是,究竟是删除了这个图标呢,还是真地删除了这个应用. 由于iTunes会同步应用回去,在我删了几次并被同步回去以后,我便一直认定,这只是在删除图标,就像windows桌面上删除一个快捷一样(我同步iPad一般是在睡觉的时候让电脑自己干,故而没有认真观察过).

周报的逻辑

- Shell Wang - 坏脾气的小肥
最近新同事加入很多,按照我的要求,入职半年内需要发送周报给我,半年后自己选择是否仍需发送. 行业内可能大部分的人都认为,周报就是流水账,是主管显示权力的手段. 最后还就真把它给搞成了一封流水账,或寥寥数语. 在职场中,有一条冷酷定律,叫做“如果主管不知道你做了某件事情,相当于你就没有做过这件事情. ”听上去不近人情,其实完全符合实用逻辑.

“脏话”的逻辑

- 星云 - 左岸读书_blog
脏话属于避讳之词,因此书面资料对说脏话的起源记录也很少,即使现在,很多词典也并不收录不敬之词,人们自然也没有多少关于说脏话的研究. 心理研究者认为,说脏话和孩子的啼哭很相似. 在幼儿时期,哭叫是一种可以接受的表达情感和释放压力和焦虑的方式. 随着儿童的长大(特别是男孩),西方社会的文化并不鼓励他们哭喊,特别是在公共场合.