select的逻辑读的过程

select的逻辑读
逻辑读:=== db block gets +consistent gets

第一步:算出dba ==========>找到DBA,5号文件,9509号块???????
第二步:根据第一步做hash运算。算出在哪个bucket上面,比如是100。
第三步:在hash table上找100号bucket(数组:初始值+offset)
第四步:在搜索cache buffer chain链表前会在100号bucket加一把独占的latch锁找到了bucket入口,在bucket上挂着BH(buffer head)
获取一此latch在10 负6次级别
desc v$latch_children
select name from v$latch_children;
第5步:在CBC latch保护下服务器进程去搜索cache buffer chain ,找BH.
第6步:如果在CBC上找到BH,在找到的BH上加上共享的buffer ping锁(中级队列所)
第7步:释放HASH latch锁
第8步:从BH中读到BA(BUFFER ADDRESS),通过BA找到我们的BUFFER cache中所要的buffer,开始逻辑读
第9步:逻辑读完成时,获取CBC latch
第10步:释放buffer ping锁
第11步:释放CBC latch

在整个逻辑读的过程中两个CBC latch ,一次 buffer pin?
为什么加独占的latch锁???
独占:是不是要去修改一个数据
共享:是不是要读取一个数据

时间: 2024-11-10 08:18:16

select的逻辑读的过程的相关文章

浅谈SQL Server逻辑读、物理读和预读

[摘要] 对SQL Server数据库进行性能优化时,有一个重要的工作是优化IO开销.通过开启Statistics IO,我们可以了解到语句执行的IO开销,包含物理读.逻辑读.预读等.而我们是否了解这三者的区别和联系呢,相信很多人都不是很理解,下面我们一起来探索这三者究竟分别代表着什么. [正文] 一  .SQLServer数据存储方式 SQL Server的数据库包括数据文件和日志文件,一个数据库可以有一个或多个数据文件或日志文件. 所有的数据都存储在数据文件中,而数据文件可以划分为再小的单元

ORACLE 物理读 逻辑读 一致性读 当前模式读总结浅析

在ORACLE数据库中有物理读(Physical Reads).逻辑读(Logical Reads).一致性读(Consistant Get).当前模式读(DB Block Gets)等诸多概念,如果不理解或混淆这些概念的话,对你深入理解一些知识无疑是一个障碍,但是这些概念确实挺让让人犯晕的.下面我们总结.学习一下这方面的知识点.捋一捋他们的关系和特点,希望对你有所帮助. 物理读(Physical Reads) 从磁盘读取数据块到内存的操作叫物理读,当SGA里的高速缓存(Cache Buffer

Oracle逻辑读详解

1.物理读(physical read) 当数据块第一次读取到,就会缓存到buffer cache 中,而第二次读取和修改该数据块时就在内存buffer cache 了 以下是例子: 1.1  第一次读取: C:"Documents and Settings"Paul Yi>sqlplus "/as sysdba" SQL*Plus: Release 9.2.0.4.0 - Production on Thu Feb 28 09:32:04 2008 Copy

转自go_with_wind的博客Oracle逻辑读详解

原文地址:http://blog.sina.com.cn/s/blog_6ceed3280100x0om.html 1.物理读(physical read) 当数据块第一次读取到,就会缓存到buffer cache 中,而第二次读取和修改该数据块时就在内存buffer cache 了 以下是例子: 1.1  第一次读取: C:"Documents and Settings"Paul Yi>sqlplus "/as sysdba" SQL*Plus: Relea

逻辑读时的cbc latch(三)

继续验证使用索引时,cbc latch相关情况,使用solaris中的dtrace 编写dtrace脚本 more cbc.d #!/usr/sbin/dtrace -s -n  char *memnr; int latchaddr; dtrace:::BEGIN {         i=1;         latchaddr=0; } pid$1::sskgslcas:entry {         memnr=copyin(arg0,12);         latchaddr=arg0;

初谈SQL Server逻辑读、物理读、预读

前言 本文涉及的内容均不是原创,是记录自己在学习IO.执行计划的过程中学习其他大牛的博客和心得并记录下来,之所以想写下来是为了记录自己在追溯的过程遇到的几个问题,并把这些问题弄清楚. 本章最后已贴出原文地址. 1.SQL Server的数据存储方式 要理解逻辑读.物理读.预读这三个概念,先要搞懂SQL Server的数据存储方式. SQL Server数据库包括数据文件和日志文件,一个数据库可以有一个或多少数据文件.日志文件.所有的数据存储在数据文件中,数据文件可以划分为再小的单元,我们称为“页

Java NIO 读数据处理过程

这两天仿hadoop 写java RPC框架,使用PB作为序列号工具,在写读数据的时候遇到一个小坑.之前写过NIO代码,恰好是错误的代码产生正确的逻辑,误以为自己写对了.现在简单整理一下. 使用NIO,select()到读事件时,要处理4种情况: 1. channel还有数据,继续读. 2. channel中暂时没数据,但channel还没断开,这是读取到的数据个数为0,结束读,继续到select()处阻塞等待数据. 3. 另一端channel.close()关闭连接,这时候读channel返回

Oracle参数Arraysize设置对于逻辑读的影响分析

说明: 当执行一条SQL查询的时候,为了获得满足的数据,查询在这个过程中完成解析,绑定,执行和提取数据等一系列步骤,这些步骤都是单独执行的,满足条件的数据行必须由数据库返回给应用:对于任何大小的结果集,需要返回的数据行很可能不是在一次往返调用过程中传递给应用的! 每次调用过程中,数据库与客户端之间的往返回路数将一定层次上影响总的响应时间,其中除了提取数据(FETCH)步骤,其余步骤(解析,绑定,执行)都只执行一次,这也是必要的,Oracle需要获得满足查询条件的所有数据结果从而执行多次提取操作.

物理读,逻辑读,预读

在使用SET STATISTICS IO ON语句统计I/O时候,我们会看到类似下面的结果: 扫描计数 1,逻辑读取 2 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次. 那么它们代表什么呢? 预读:用于估计信息,去硬盘读取数据到缓存. 物理读:查询计划生成好以后,如果缓存缺少所需要的数据,让缓存再次去读硬盘.如果内存里没有缓存数据或执行计划(sql语句改变执行计划不能重用,需要重新计算执行计划),那么SQLSERVER就要去硬盘读取