Oracle 基本概念深入

简介:

 Oracle 逻辑读:

     我们都知道,数据块是oracle最基本的读写单位,但用户所需要的数据,并不是整个块,而是块中的行,或列.当用户发出SQL语句时,此语句被解析执行完毕,就开始了数据的抓取阶段,在此阶段,服务器进程会先将行所在的数据块从数据文件中读入buffer cache,这个过程叫做物理读.物理读,每读取一个块,就算一次物理读.

     当块被送进buffer cache,并不能立即将块传给用户,因为用户所需要的并不整个块,而是块中的行.buffer cache的块中读取行的过程,就是逻辑读.为了完成一次逻辑读,服务器进程先要在hash表中查找块所在的cache buffer .找到之后,需要在这个链上加一个cache buffer chains ,加闩成功之后,就在这个链中寻找指定的块,并在块上加一个pin.并释放cache buffer chains.然后就可以访问块中的行了.

     服务器进程不会将块中所有满足条件的行一次取出,而是根据你的抓取命令,每次取一定数量的行.这些行取出之后,会经由PGA传给客户端用户.行一旦从buffer cache中取出,会话要释放掉在块上所加的PIN.本次逻辑读就算结束.如果还要再抓取块中剩余的行,服务器进程要再次申请获得cache bufffer链闩.再次在块上加PIN.这就算是另外一次逻辑读咯.也就是说,服务器进程每申请一次cache buffer链闩,就是一次逻辑读.而每次逻辑读所读取的行的数量,可以在抓取命令中进行设置.

     逻辑读和Cache buffer chains闩关系密切,TOM曾有文章提到,进程每申请一次Cache buffer chains闩,就是一次逻辑读。但是,逻辑读并不等同于Cache buffer chains闩,每次逻辑读,在9i中至少需要获得两Cache buffer chains闩。逻辑读是指在Hash表中定位块的这个过程。

 

Oracle Sql loader 直接插入和间接插入:

 

   这个问题相信很多人都已经知道了,为了方便初学者,我再来重审一遍。

create table 表1 as select 列1,列2,... select 表2

insert /*+append*/ into 表1 select 列1,列2,... select 表2

如上形式的插入,都叫做直接路径插入。当然,在SQL*Loader中也有直接路径插入的形式。

所谓直接路径插入,就是绕过Buffer cache,直接将数据插入进表所在数据文件中。

假如有表AA,要将AA中的数据插入进表BB,在普通的间接插入下,先将AA的数据块传进Buffer cache,再将BB的块也传进Buffer cache,在Buffer cache中从AA的块中读出行,插入进BB的块中。BB的块就都变成了脏块,再等待DBWn把它们写进数据文件。因此,间接路径插入后,AA表的块和BB表的块都会在Buffer cache中出现。

而直接路径插入下,将AA表的数据块传进Buffer cache中,读出行,直接写进BB表所在的数据文件。插入完毕后,除了表头块外,BB表的数据块并不会出现在Buffer cache中。









本文转自 客居天涯 51CTO博客,原文链接:http://blog.51cto.com/tiany/844421,如需转载请自行联系原作者
目录
相关文章
|
7月前
|
SQL Oracle 安全
Oracle杂谈一 Oracle数据库的一些基本概念
Oracle杂谈一 Oracle数据库的一些基本概念
43 0
|
11月前
|
Oracle 关系型数据库 数据库
Oracle数据库基本概念理解(3)
Oracle数据库基本概念理解(3)
62 0
|
11月前
|
Oracle 关系型数据库 数据库
Oracle数据库基本概念理解(2)
Oracle数据库基本概念理解(2)
37 0
|
11月前
|
Oracle 关系型数据库 数据库
Oracle数据库基本概念理解(1)
Oracle数据库基本概念理解(1)
54 0
|
Oracle 关系型数据库 数据库
Oracle数据库基本概念理解(7)
Oracle数据库基本概念理解(7)
84 0
|
存储 SQL Oracle
Oracle数据库基本概念理解(3)
Oracle数据库基本概念理解(3)
101 0
|
Oracle 关系型数据库 数据库
Oracle数据库基本概念理解(2)
Oracle数据库基本概念理解(2)
117 0
|
Oracle 关系型数据库 数据库
Oracle数据库基本概念理解(1)
Oracle数据库基本概念理解(1)
74 0
|
监控 Oracle 关系型数据库