Oracle8i Internal 封面&第一章

简介:
本书基于Oracle 8i和Oracle 8.1版本,包括了详细的,难以找寻到的关于Oracle 内部结构的信息(数据结构,算法,隐含参数,以及文档上未说明的系统统计信息)。
主要议题包括等待,闩,锁(包括在并行服务器下的实例锁),内存的使用和管理。主要针对的阅读人群是性能调优人员。
前言
为什么写这本书?
提醒
适合阅读本书的人群
关于APT脚本
使用本书注意事项
注释和问题
致谢
1.
介绍
1.1
ORACLE 内核层
1.2
内核服务
2.
等待
2.1
信号灯
2.2
等待统计
2.3
参考
3.

3.1
闩和锁
3.2
父闩与子闩
3.3
闩的获取
3.4
高级闩控制
3.5
参考
4.

4.1
锁的使用
4.2
锁的模式
4.3
队列锁
4.4
数据字典锁
4.5
库缓存锁
4.6
数据库操作锁
4.7
缓存锁
4.8
排序锁
4.9
参考
5.
实例锁
5.1
锁管理者
5.2
全局锁
5.3
分布式实例锁
5.4
其他实例锁
5.5
参考
6.
内存
6.1
系统全局区
6.2
共享池
6.3
进程内存
6.4
参考


前言
在若干年以前,我决心钻研,并且写一本高级的ORACLE性能调优书籍。很快,我写了超过30页的大纲。可是,当我开始写的时候,我才发现我所学的ORACLE的知识是多么的有限。每一章节所耗费的时间都超过了我之前的预计。特别的是,我开始发现对于ORACLE内部结构某些方面的理解对我的研究是极其重要的。所以,我开始学习我所需要的ORACLE内部结构的知识,以X$表开始。
如果当时我知道,我将付出多么大的精力去完成这本书,我可能不会想去写。
很多次,我都绝望得想放弃,好在有我的朋友们对我的鼓励,我才能坚持下来。
他们总是相信我能够理解那些难以理解的并且能构造出关于ORACLE是如何工作和如何调优的连贯的理解。这就有点像探测一座冰山的形状,你必须环绕过它的四周,小心翼翼的测量它表面下的颤动,只有做到这种严谨的态度,你才能研究透它。
为什么写本书?
我理想中的ORACLE性能调优的书籍仍然是一个梦想。你可以把这本书当成是:一本对ORACLE内部结构进行介绍的书。通过详细的解释ORACLE内部结构的某些方面来建立ORACLE性能调优的基准。
这里你将找到在文档中没有的系统统计的解释。你将学习到如何从X$表收集到额外的统计数据。你对于ORACLE如何工作的理解将基于许多ORACLE内部数据结构和算法的清晰的理解。你将会被提醒一些未在文档中提及的潜在的性能问题。你将会通过大量的隐含参数和其他未在文档写明的特性来扩展你的调优和诊断技能。
提醒
我在书中提到的ORACLE内部结构的信息不适合普通的读者。因为我不是ORACLE的内部人员,我必须通过艰辛的努力才将本书的“原材料”汇集起来。我从研究X$表的结构和内容开始,并且查看跟踪文件。然后我用公式假设和测
试他们。由于我研究的方式,也许我的结论是错的,并且有些建议可能会误导你,或者可能要在一定的限制条件下才能应用。所以你应该自己测试所有的一切。如果你能找到任何的错误,给我发邮件以便我能将他们改正。(看注释和问题)
你应该注意到这本书写的非常大胆以致于ORACLE的工程师不会为你提供技术支持。我解释并且经常建议对各种各样文档上没有的特性进行使用,因为我发现它们对于调优是很有帮助的。可是ORACLE选择将这些特性从文档上抹去,也许是一些其他的原因吧。所以,别指望ORACLE帮助你使用它们。尝试请求他们的帮助,但是一旦碰到了问题,别询问ORACLE技术支持人员,它们不会告诉你的。
最后,请注意,本书面向ORACLE 8I,版本8.1。尽管大多数的议题也适用于更早的版本,当然有些并不是。特别的是,ORACLE 8I与版本8.1在并行服务器上的改变是巨大的,并且在版本8.1中,大量的参数被隐藏了。
本书适用的人群
面向数据库管理员和想详细的了解ORACLE性能的开发人员。尽管面向的是比较高阶层的人员,但是书中的示例还是较容易完成的。任何一位对ORACLE架构很了解或是对性能调优有兴趣的人都会很喜欢本书所介绍的内容。哪怕是很有经验的老手也会非常欣赏它。
关于APT脚本
本书总结了大量的关于APT脚本的参考。APT代表着高级性能调优。这仅仅是我个人ORACLE性能调优的脚本。本书的脚本可以从O'Reilly'的官网或者是本人手中获得(看建议和问题)。APT不是一个商业的产品,所以大可自由传阅。
使用本书注意事项
斜体字
用于文件,脚本,闩,统计和等待事件的命名;也用于强调和新的术语。
常数宽度
用于例子
大写
用于ORACLE SQL关键词,初始化参数,表名,视图名,字段名,包名,存储过程名。
建议和问题
有关于本书的建议和问题请发到作者的地址
O'Reilly & Associates, Inc.
101 Morris Street
Sebastopol, CA 95472
800-998-9938 (in the U.S. or Canada)
707-829-0515 (international or local)
707-829-0104 (fax)
你也可以给我们发电子邮件(booktech@oreilly.com).对本书的改正与补充,以及对APT脚本的拷贝,查看O'Reilly的官网http://www.oreilly.com/catalog/orinternals/
APT脚本可从此路径下载http://www.ixora.com.au/
你也可以直接联系我steve.adams@ixora.com.au
请看书后的关于O'Reilly在线服务的广告
致谢
在本书的撰写过程中,对我帮助最大的,是我的妻子,Alison Adams。如果你喜欢本书,那全要归功于我的妻子。每当我需要研究与撰写本书时,我就不得不减少我陪伴Alison以及我们年幼的孩子Jennifer, Stephanie, David的时间,而这些时间我应该陪伴在他们身边。
我还要感谢Guy Harrison,第一个带我走进ORACLE性能调优的人;Jonathan Lewis,我从他身上学到的最多;Dave Ensor,改变了我对栓锁直接获取的错误理解;还有,Jared Still,一个总是通过实验来验证我想法的人。朋友们,感谢你们,对每一章节草稿的审阅,还有你们时常对我的鼓励。同样要感谢在网上和我相互发邮件还有在论坛上讨论的朋友们。在我理解ORACLE的旅途中,你们提供了大量的经验之谈还有持续的鼓励。
感谢O'Reilly的团队-同意出版本书,感谢他们在筹备本书的过程中付出的努力,当然还要感谢最后审稿的团队,他们是:Jonathan Gennick, Amjad Daoud, and Anjo Kolk.

 

 


第一章 简介
为什么人们对ORACLE的内部结构非常感兴趣?部分原因是因为内部信息对于调优和诊断是非常有帮助的。也是因为ORACLE公司对大部分的内部结构保密,而仅仅暴露一些不重要的信息。
事实上,ORACLE内部结构信息仅仅对高级性能调优有帮助。基本的应用级别的调优最被需要,也是最有用的。尽管如此对高级性能调优的需求也在慢慢增加,也就是当你想对ORACLE是如何工作有一个更深入的了解的时候,本书提供了一些基本方法。
在欣赏到本书所作出的贡献,并且把它落成文字之前,你需要对ORACLE的内核层级有一个基本的了解。
1.1
ORACLE 内核层级


ORACLE内核由多种层级组成,图1.1展示了主要的层级。每一个层级都基于它底层的服务,并且可能会以任意一种顺序直接调用它们。但是,控制不会超越堆之上,除非他们从调用中返回。
这个规则的一个明显的特例就是数据层和事务层有时需要为某些任务执行递归的事务,这些任务包括索引块的分离或区空间管理,并且对于任务,递归调用是必须的,这些任务包括从存储程序单元中触发器和SQL语句的执行。可是,一个分离的上下文被建立,并且从最高层级重新访问这个堆,取代之前的从同一个会话或上下文调用回内核层级执行或者编译的方法。
图1.1 ORACLE内核层级
每一个层级都有一个短名或者缩写,它作为它的模式名字的前缀使用。举个例子,KC是kernel cache layer(内核缓存层)的缩写。这些短名在图1.1中展示并且在下列的列表中。类似的,每一个组成这些层级的模式也都有一个短名。例如,KCR代表着在缓存层上的重做管理模式。这些模式都是以他们的数据结构和函数调用的名字的前缀来命名的。例如,KCRFAL是重做分配闩。这样的命名规则让ORACLE的名字一开始看上去隐义得有点可怕,但是他们很快就变得容易识别,并且有助于理解。尽管如此,你还是会很高兴的看到本书对有些隐含的参数采用了较长的名字。
The Oracle call interface (OCI)(ORACLE调用接口)
ORACLE调用接口是客户端程序与ORACLE联系的最低层级。这个接口在文档中已写得很详细了,并且允许你访问大多数的ORACLE功能,包括一些高级的特性,如物质的导航,还有复杂的事务和会话的控制。为了使用在其它ORACLE工具中不提供的特性,有高级需求的应用需要直接使用OCI。
The user program interface (UPI)(用户程序接口)
ORACLE调用接口基于用户程序接口。仍然有许多用户程序接口工具不通过ORACLE调用接口提供,所以有些ORACLE工具直接调用此接口。预编译的程序同样调用用户程序接口,但并不直接通过SQLLIB库-一种未在文档上说明的ORACLE调用接口的选择。
The Oracle program interface (OPI)(ORACLE程序接口)
用户程序接口是客户端调用堆的最低层级,而ORACLE程序接口是服务端的最高层级。在大部分配置的情况下,NET8是用户程序接口和ORACLE程序接口的桥梁。但是,在单任务模式下,用户程序接口直接调用ORACLE程序接口。
The compilation layer (KK)(编译层)
从严格意义上讲,编译层是ORACLE的最高层级。这层主要负责解析与SQL语句的优化,还有PL/SQL程序单元的编译。
The execution layer (KX)(执行层)
这层操纵SQL语句与PL/SQL程序单元的执行与绑定。它同样负责触发器的递归调用的执行,还有PL/SQL程序单元随同SQL语句的执行。
The distributed execution layer (K2)(分布式执行层)
分布式执行层建立了分布式事务的架构,并且操作控制了这两个阶段的提交协议。
The network program interface (NPI)(网络程序接口)
当远程的对象调用了一条SQL语句,网络程序接口将语句分解发送到远端的数据库数据库实例并且接收返回的数据。
The security layer (KZ)(安全层)
本层由编译层与执行层调用从而来验证需要的对象与系统权限。
The query layer (KQ)(查询层)
本层提供了到更高层级的行。特别的是,查询层负责从数据字典中缓存行,以便于安全层与编译层的使用。
The recursive program interface (RPI)(递归程序接口)
用于从数据字典中聚集字典缓存。字典缓存递归SQL语句执行于一个分离的调用上下文,但它并未被编译层解析与优化。
The access layer (KA)(访问层)
访问层负责数据段的访问。这是内核中另一半较低层的第一层。
The data layer (KD)(数据层)
本层负责数据段上块数据的管理与说明,例如表,簇以及索引。
The transaction layer (KT)(事务层)
本层负责回滚段的事务分配,列出相关事务数据块的改变,回滚段块的改变因而产生回滚信息,事务控制,如锁保存(savepoint)和读一致性。事务层同样负责空间管理,不仅在段空间自由链表级别还在表空间区扩展级别。
The cache layer (KC)(缓存层)
缓存层管理着数据库缓存。它依赖于操作系统对数据文件进行I/O,提供了本地到缓存池的并发控制,并且为ORACLE并行服务器提供分布式锁的管理。缓存层其它的主要功能就是日志缓存池中重做日志的产生,并且将其写到日志文件中。缓存层也同样缓存控制文件的信息。
The services layer (KS)(服务层)
服务层为其它较高等级的层级提供较低等级的服务,例如错误操纵,除错或者跟踪设备,就如同参数控制和内存服务。特别的是,服务层专门负责一般的,并发的控制如闩,等待事件,排队锁和实例锁。本层还负责后台与用户的进程与会话的数据结构的管理,这些数据结构包括了状态对象,内部进程信息和系统统计数据。
The lock management layer (KJ)(锁管理层)
本层主要负责同步和并行服务数据库实例之间锁的使用。
The generic layer (KG)(一般层)
本层提供被高层级使用的一般数据结构的管理,比如链表。特别的,它还提供库缓存与内存分配堆给共享池与会话内存使用。
The operating system dependencies (S)(操作系统相关层)
Oracle通过操作系统I/O,处理报表,内存管理和其它操作。基于操作系统实现以上操作,所以本层区别于其它各层。
1.2
内核服务
本书涵盖的内核服务包括等待,闩,锁和内存。尽管如此,你只能做很少的对这些服务本身的调整,你仍然需要理解它们,特别是当你在调整Oracle的其它部分的时候。
第二章
对于Oracle的高级调优来说等待数据是最重要的统计信息。本章解释了如何收集和使用这些数据。
第三章
Oracle大量使用闩,而且高级的性能调优经常需要避免闩的竞争。本章通过解释这些闩的使用来提供一个调优的基础。
第四章
Oracle使用多种类型的锁。本章解释这些锁是如何使用的和如何诊断锁问题。
第五章
Oracle并行服务技术对于调优增加了额外的方面的知识。本章解释了并行服务的锁是如何实现的,统计信息意味了什么。
第六章
本章解释了Oracle内部的内存管理是如何工作的。我特别提到了共享池的内部管理,并且评定它的大小设置是否正确。
当然,Oracle的内部结构比本书所提到的多得多,本书提供了高级性能调优所需要的一些基础知识。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值