- 浏览: 1099020 次
- 性别:
- 来自: 南京
博客专栏
-
Oracle管理和开发
浏览量:353161
最新评论
-
Simon.Ezer:
请问对于“如果非主键字段值发生改变,则不会同步过去”这种情况, ...
创建增量同步Oracle物化视图问题 -
dahai639:
挺好的,支持一下
Oracle的pipelined函数实现高性能大数据处理 -
zealotpz:
不错,原来是用户oracle 的所属组的问题
以sysdba身份登录oracle报ORA-1031权限不足错误之完美分析 -
mikixiyou:
zhangyuslam 写道如果担心全局索引失效,可以使用如下 ...
Oracle分区表的分区交互技术实现数据快速转移 -
sea0108:
...
Oracle sql loader使用速成
Oracle shared pool 主要分为library cache 、dictionary cache 和control structure 三个部分。
第一部分library cache 保存已执行的SQL 和PL/SQL 语句,和它们的执行计划等信息。
library cache 管理机制是采用一种hash 算法,实现library cache object 的快速查找和保存。
该hash 算法将library cache 空间定义为hash table 。hash table 中由多个bucket 组成,每个bucket 中,又由一个或多个library cache object handle 组成。library cache object handle 包含了library cache object 、名称等信息。通过handle 可以找到library cache object 和它们的内容。
(注:hash table 有多个hash bucket 组成,形成数组。hash bucket 有一个或多个object handle 组成。同一个bucket 中的不同的object handle 对象之间的关系是怎么样的?是数组还是链表?)
(miki西游 @mikixiyou 原文链接: http://mikixiyou.iteye.com/blog/1661948 )
library cache object handle 的结构如下:
- handle addr
- name
- namespace
- lock owners
- lock waiters
- pin owners
- pin waits
- flag
- heap 0(Object)
在library cache object handle 中,heap 0 又称object ,是一个指向对象的指针。heap 0 指向的对象的结构为:
- object type
- object name
- flags
- tables
- data blocks
在heap 0 中,tables 和data blocks 也是指向其他两个对象的指针。
tables 指向的对象的结构为:
- dependency table
- child table
- translation table
- authorization table
- access table
- r-o dependency table
- schema name table
data blocks 指向的对象的结构为:
- object
- source
- diana
- pcode
- mcode
- errors
- sql context 。
其中source 也称为heap 1 用于存储sql 文本,sql context 称为heap 6 用于存储SQL 执行计划。
手工将一个SQL 的类型为CRSR 的object handle 从内存中dump 出来。分别为parent cursor 和child cursor ,分别在不同bucket 。
在parent cursor 的children 栏中有指向child cursor 的handle 地址。
BUCKET 5944: LIBRARY OBJECT HANDLE: handle=1895899e8 mtx=0x189589b18(1) cdp=1 name=select* from sys.obj$ where obj#=:x hash=8cd0bd4dbb09ea7c3d007f1ce9b01738 timestamp=08-21-2012 10:02:35 namespace= CRSR flags=RON/KGHP/TIM/PN0/SML/KST/DBN/MTX/[120100d0] kkkk-dddd-llll=0000-0001-0001 lock=N pin=0 latch#=6 hpc=0002 hlc=0002 lwt=0x189589a90[0x189589a90,0x189589a90] ltm=0x189589aa0[0x189589aa0,0x189589aa0] pwt=0x189589a58[0x189589a58,0x189589a58] ptm=0x189589a68[0x189589a68,0x189589a68] ref=0x189589ac0[0x189589ac0,0x189589ac0] lnd=0x189589ad8[0x189589ad8,0x189589ad8] LOCK OWNERS: lock user session count mode flags -------- -------- -------- ----- ---- ------------------------ 17f72e938 1852c9890 1852c9890 1 N [00] LIBRARY OBJECT: object=1786e6168 type=CRSR flags=EXS[0001] pflags=[0000] status=VALD load=0 CHILDREN: size=16 child# table reference handle ------ -------- --------- -------- 0 17816fa10 17816f680 144768330 DATA BLOCKS: data# heap pointer status pins change whr ----- -------- -------- --------- ---- ------ --- 0 144773248 1786e6280 I/P/A/-/- 0 NONE 00 BUCKET 5944 total object count=1
LIBRARY OBJECT HANDLE: handle=144768330 mtx=0x144768460(0) cdp=0 namespace=CRSR flags=RON/KGHP/PN0/EXP/[10010100] kkkk-dddd-llll=0000-0001-0001 lock=N pin=0 latch#=6 hpc=fffe hlc=fffe lwt=0x1447683d8[0x1447683d8,0x1447683d8] ltm=0x1447683e8[0x1447683e8,0x1447683e8] pwt=0x1447683a0[0x1447683a0,0x1447683a0] ptm=0x1447683b0[0x1447683b0,0x1447683b0] ref=0x144768408[0x17816f680,0x17816f680] lnd=0x144768420[0x144768420,0x144768420] CHILD REFERENCES: reference latch flags --------- ----- ------------------- 17816f680 11 CHL[02] LOCK OWNERS: lock user session count mode flags -------- -------- -------- ----- ---- ------------------------ 17f72f1d8 1852c9890 1852c9890 1 N [00] LIBRARY OBJECT: object=178161a10 type=CRSR flags=EXS[0001] pflags=[0000] status=VALD load=0 DEPENDENCIES: count=1 size=16 dependency# table reference handle position flags ----------- -------- --------- -------- -------- ------------------- 0 17837dae8 17837d828 189addbb8 17 DEP[01] AUTHORIZATIONS: count=1 size=16 minimum entrysize=16 00000000 00000000 00020000 00000000 ACCESSES: count=1 size=16 dependency# types ----------- ----- 0 0009 SCHEMA: count=1 size=262144 00000000 DATA BLOCKS: data# heap pointer status pins change whr ----- -------- -------- --------- ---- ------ --- 0 144e55298 178161b28 I/P/A/-/- 0 NONE 00 6 1786cd5a0 16ece5dc0 I/-/A/-/E 0 NONE 00
Oracle 执行每一个SQL ,都在shared pool 的library cache 中。library cache 中的对象,使用hash table 方式管理。
当一个SQL 第一次发送到Oracle Server 时,Oracle 首先会将该SQL 转换成ASCII 码,然后通过hash 算法得到一个hash 值。这就是经常看到的存在于v$sql 和v$sqlarea 的hash_value 。
Oracle 会请求一个shared pool latch 在library cache 中分配一个存储空间,然后释放该shared pool latch ,再请求一个library cache latch ,将这个SQL 写入到library cache 中的相应的bucket 中。这时生成的对象称为library cache object handle ,它的namespace 值也就是type 的值称为CRSR 。
类型为CRSR 的library cache object handle 的对象有两个,分别PARENT CRSR 和CHILD CRSR 。这也就是我们在SQL 优化中常见的CURSOR 。
类型为PARENT CURSOR 的library cache object handle 对应的动态性能视图为v$sqlarea 。
类型为child cursor 的library cache object handle 对应的动态性能视图是v$sql 。
可以试着这样理解一下。parent cursor 保存SQL 文本,一条SQL 就是一个parent cursor 。child cursor 和parent cursor 的子类,保存不同用户、不同优化器模式、不同索引,不同参数传入值等而生成的SQL 执行计划、执行次数、执行时间、执行逻辑读和物理读等信息。
因此,同一个SQL ,会生成多个child cursor 和一个parent cursor 。
每生成一个child cursor ,在parent cursor 就记录为一个version 。在v$sqlarea.version_count 中记录的数字是所有曾生成过的child cursor 。
在v$sqlarea 中,有些字段是v$sql 的字段的聚合值,如fetchs,executions,buffer_gets,disk_reads 。
当这个SQL 第二次发送到Oracel Server 中,生成的hash_value 值,在parent cursor ,即libarary cache object handle 的链表,也就是v$sqlarea 中找到符合的记录时,会继续到child cursor 中去找,如有此SQL 相关信息完全相同的记录时,则共享使用该child cursor ,这在oracle 会记录为一次soft parse 。如果在child cursor 中没找到可以共享的记录,则会生成一个child cursor ,在parent cursor 中会增加一个version ,这在oracle 会记录为一次hard parse 。
在soft parse 中,还有一种情况,就是child cursor 被共享3 次(此值属于道听途说,不确定)后,oracle 会将此child cursor 放到session cached cursor 中。Oracle 在找child cursor 之前会在session cached cursor 链表中去找,有符合条件的记录则会记录一次soft soft parse 。
简而言之,在session cached cursor 中找到,则称为soft soft parse ,若在child cursor 中找到则称为soft parse ,都没有找到,则生成一个child cursor ,称为hard parse 。
在Oracle 中,library cache object handle 的hash table 是一个逻辑概念,dump 出来的shared pool 内容也不全面,v$sql 和v$sqlarea 也仅仅是一个查看对象的视角。窥豹一斑,也可能是盲人摸象。需要理解Oracle 的内部机制,真是不容易。
发表评论
-
Oracle分区表的分区交互技术实现数据快速转移
2013-01-22 11:48 14810有一个需求,将某业务表的某个时间点之前的记录转移到它的历史 ... -
等待事件enq TX row lock contention分析
2013-01-17 17:16 33298在Oracle数据库性能报告AWRRPT分析时,发现top ... -
Oracle的UNDO表空间管理总结
2013-01-14 15:06 12992UNDO是Oracle中的一个很 ... -
Oracle在不同windows系统中的迁移
2013-01-09 15:41 3807在Windows操作系统环境下 ... -
Oracle 10.2.0.1在windows 2008上安装失败经历
2013-01-07 10:29 8706这两天遇到这个一个项目上的数据库迁移的问题。原来的环境是数据库 ... -
所有的物化视图刷新脚本
2012-12-28 13:59 0select 'execute dbms_mview.refr ... -
Oracle数据库的SQL性能问题分析
2012-12-27 15:31 5289在Oracle 10.2.0.4数据库中,有一个SQL执行缓慢 ... -
db block gets和consistent gets的分析
2012-12-26 18:09 0在Oracle的文档中有这样一段解释: db block g ... -
创建增量同步Oracle物化视图问题
2012-12-25 14:07 15316我们采用Oracle的物化视图增量刷新机制定时将数据库A上的某 ... -
查归档日志文件每小时生成量
2012-12-18 16:13 10794在O racle数据库中,通过v$archived_lo ... -
如何删掉临时表空间的文件
2012-12-18 15:40 0Unlike Oracle datafiles which m ... -
Oracle sql性能诊断暨event 10046和10053使用
2012-12-17 10:24 0早上em grid control监控显示数据库的负载增加,其 ... -
查LOB字段占用的空间大小
2012-12-13 16:00 4584查询Oracle表中LOB字段的占用空间大小。表中每一个LOB ... -
Oracle Data Guard的重做日志传输和应用状况监控
2012-12-04 14:05 4081这是一个用来监控Oracle Data Guard环境下从主库 ... -
Oracle sql loader使用速成
2012-11-30 14:14 4955Oracle SQL LOADER是Oracle的 ... -
Oracle 11g2的监听器配置
2012-11-29 14:34 4391Oracle的监听器服务注册 ... -
Deleting archivelog on physical standby with RMAN in Oracle 10g
2012-11-28 13:25 0Turns out to be quite easy ... -
to_char将number转成string的小技巧
2012-11-27 14:14 10639很多数据转换处理操作时,会遇到将0.007007040000转 ... -
to_date转成字符串时ORA-01843 not a valid month 问题分析
2012-11-26 16:38 29315(注,本文三度易稿) 在开发Oracle SQL或PL/SQL ... -
Data Guard 10g 的保护级别为RESYNCHRONIZATION问题
2012-11-25 11:01 1923Oracle的data guard创建完成 ...
相关推荐
Oracle Core Essential Internals for DBAs and Developers.pdf Jonathan Lewis ■Chapter 1: Getting Started . . . ................................................................................. 1 ■...
essentially it boils down to undo redo data caching and shared SQL Even then I’ve had to be ruthless in eliminating lots of detail and interesting special cases that would make the book too long ...
Oracle in Processes ........................................................................................................... 1 Oracle in Action ........................................................
《Oracle Core Essential Internals for DBAs and Developers》是针对数据库管理员(DBAs)和开发者的一本深入解析Oracle核心内部机制的重要参考资料。这本书旨在帮助读者理解Oracle数据库系统的基础架构、工作原理...
《Oracle Core Essential Internals for DBAs》是一本专为数据库管理员(DBAs)设计的Oracle数据库经典管理书籍。这本书深入探讨了Oracle数据库的核心内部机制,帮助读者理解并掌握Oracle数据库的运行原理,从而更有效...
- 书中第一部分开始介绍Oracle的重做日志和撤销机制,这两个是Oracle数据库中至关重要的概念。重做日志记录了对数据库所做的更改,以便在系统崩溃后进行恢复。撤销段用来存放回滚事务所需的信息,确保数据的读取...
《Oracle Core Essential Internals for DBAs and Developers》是一本针对数据库管理员(DBAs)和开发人员深入理解Oracle核心原理的重要参考资料。这本书详细介绍了Oracle数据库系统的内部工作机制,帮助读者提升在...
标题《Understanding Oracle RAC Internals - The Cache Fusion Edition》涉及的主题是Oracle RAC内部机制,特别是Cache Fusion技术。Oracle RAC(Real Application Clusters)是Oracle数据库的一个重要特性,它允许...
《Oracle Core Essential Internals for DBAs and Developers》是一本专注于Oracle数据库核心机制的书籍,由Apress出版社出版,作者是数据库领域的专家Jonathan Lewis。该书旨在深入探讨Oracle数据库的核心内部工作...
《Exploring Oracle Internals》一书深入探讨了Oracle数据库的内部工作原理和技术细节,对于希望深入了解Oracle数据库结构、功能以及如何进行有效管理的专业人士来说是一本宝贵的资源。本书不仅提供了理论上的解释,...
Oracle Core: Essential Internals for DBAs and Developers Jonathan Lewis (Author) <<Book Details>> Paperback: 280 pages Publisher: Apress; 1 edition (November 23, 2011) Language: English ISBN-10: ...
第5章“Caches and Copies”关注Oracle的数据缓冲区高速缓存(Buffer Cache)和共享池(Shared Pool),讨论了如何优化内存使用以提高性能。 第6章“Writing and Recovery”讨论了Oracle的数据写入流程,包括检查点...
《Oracle.Core:Essential.Internals.for.DBAs.and.Developers》一书深入探讨了Oracle数据库的核心内部机制,专为数据库管理员(DBAs)和开发者设计,旨在提供对Oracle数据库内部运作原理的深刻理解。以下是对该书中...
### Oracle Index Internals #### 知识点概览 本文档深入探讨了Oracle数据库中的索引内部机制。主要内容包括各种类型的Oracle索引结构及其实施方式、索引的行为、维护策略以及成本基础优化器如何确定索引的使用...
Oracle.Core:Essential.Internals.for.DBAs.and.Developers.Jonathan.Lewis-带书签目录超清文字版 这个是带完整目录书签的文字版本,文本内容可以复制的哦
Oracle Core- Essential Internals for DBAs and Developers 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自...