Steve Adams的《oracle8i.internal.services.for.waits.latches.locks》

| 分类 oracle翻译 

Steve Adams的《oracle8i.internal.services.for.waits.latches.locks》

基于oracle 8i的8.1版,这本简洁的书包含了关于Oracle的内部详细的隐藏信息(数据结构、算法、隐藏参数、未公开的系统统计),书的大部分主题包括了等待、闸、锁(包括用于并行服务环境的实例锁)、内存使用和管理,它的目标读者是做相关高级性能调优的。

目录

前言 为什么写这本书 警告 声明 关于APT脚本 本书惯例 注解和问题 感谢

1.绪论 1.1  oracle内核层 1.2  内核服务

  1. 等待 2.1 信号量 2.2 等待统计 2.3 参考资料

  2. 闩 3.1 闩和锁 3.2  父闩和子闩 3.3  闩获得 3.4  高级闩控制

4.锁 4.1 锁的状态 4.2 锁的模式 4.3 队列锁 4.4 行cache队列 4.5 库cache锁和Pins 4.6 DML锁 4.7 缓存锁 4.8 排序锁 4.9 参考

5  实例锁 5.1  锁管理器 5.2  全局锁 5.3  PCM实例锁 5.4  其他实例锁 5.5  参考

6.  内容 6.1  SGA 6.2  共享池 6.3  进程内存 6.4  参考

1.绪论 为何人们对oracle内部信息有强烈的兴趣? 部分是因为内部信息对性能调优和排错很有用,并且由于oracle公司保留了大部分内核信息,使得更有引诱力。 实际上,只有高级的性能调优才需要oracle内部信息,最需要的、绝大多数的性能调优都是基本的应用调优。尽管如此,有时高级的性能调优是必需的,那时你需要深入理解oracle是如何运作的。这本书提供了这方面的基础知识。

为了欣赏这本书的内容,理解相关内容,你需要对oracle的内核层次有个基本了解。

1.1 oracle内核层次 oracle内核由多个层次组成,主要的层次显示在图1.1中。每一层依赖它下面层次的服务,并且可以任意的直接调用它们。然而,除非从调用中返回,控制从不经过堆栈。

一个明显的例外是数据层和交易层有时需要执行递归任务,如索引块分裂或外部空间管理,在存储程序单元里执行触发器或SQL语句也需要递归调用。但它并不是在同一个回话或调用上下文环境中反向调用内核执行或编译层,而是建立一个单独的上下文环境,堆栈从顶层重进入。

每一层都有一个别名或简写,通常是它的模块的名字。例如,KC是内核缓存层(kernel cache )的别名。这些别名显示在图1.1和下面的列表中。类似的,构成层的每个模块也有一个别名。例如,KCR是缓存层的redo管理模块。

这些模块名字是模块的数据结构和功能调用的命名前缀。例如,KCRFAL是redo分配闩 。这种命名惯例使oracle中的名字初看起来相当隐秘和令人畏惧,但不久就变得令人惊奇的容易识别,并极大的帮助我们去理解。尽管如此,你将高兴的知道 本书更喜欢用全名而不是有点隐秘的替换词。

oracle调用接口(OCI) oracle调用接口是客户端程序和oracle交互作用的最底层。这个接口的文档丰富,并提供了对oracle的大多数功能的调用,包括面向对象、复杂 交易、会话控制等高级特性。为了利用其它oracle开发工具不提供的特性,一些有高级需求的应用程序需要直接使用OCI接口。

用户程序接口(UPI) OCI是建立在用户程序接口上的。有一些UPI的特性是OCI中没有的,并且一些oracle工具实际上直接调用了这个接口,预编译程序也间接的通过SQLLIB(是未公开的OCI替换接口)调用UPI。

oracle编程接口(OPI) 用户程序接口是客户端调用堆栈的最底层,oracle编程接口是服务器端调用堆栈的最顶层。在大多数配置中,Net8在UPI和OPI中起了桥梁作用,但在单任务执行条件下,UPI调用直接对应OPI调用。

编译层(KK) 这是oracle内核的严格意义上的顶层,它负责解析优化SQL语句,编译PL/SQL程序单元。

执行层(KX) 这层处理SQL语句和PL/SQL程序单元的绑定和执行,还负责执行触发器的递归调用执行,以及SQL语句在PL/SQL单元内的执行。

分布执行层(K2) 分布执行层建立分布式事务的事务分支,管理两阶段提交协议。

网络编程接口(NPI) SQL语句引用远程对象时,NPI给远程数据库实例传递分解后的语句成分,并接受返回的数据。

安全层(KZ) 编译层和执行层调用安全层,验证被请求对象和系统的权限。

查询层(KQ) 查询层对更高的层提供记录,特别的,查询层负责用于安全层和编译层的

数据字典的缓冲记录。

递归程序接口(RPI) 递归编程接口用于填充数据字典的字典缓冲。行缓冲哦你递归SQL语句在分离的调用上下文中执行,不在编译层中解析优化。

存取层(KA) 存取层负责存取数据库段。这是内核的第一个底层部分。

数据层(KD) 数据层负责对数据库段的块中的数据(如表、簇、索引)进行解释。

事务层(KT) 事务层负责回滚段中的事务分配,记录数据块中的事务清单变化,为了undo的操作、事务控制中的保存点等属性、读一致等功能改变回滚段块。事务层也在段自由列表和表空间扩展分配级别上负责空间管理。

缓冲层(KC) 缓冲层管理数据库的缓存。它利用操作系统的数据文件I/O特性,为本地缓存的读取提供并发控制,为oracle并行服务器提供并行缓存管理(PCM)实例的锁定特性。缓冲层的其他主要任务是控制redo数据进入日志缓存,并写入日志文件。缓冲层还缓存控制文件信息。

服务层(KS) 服务层提供的底层服务被用于如错误处理、调试、跟踪、参数控制、内存服务等更高层。特别的,服务层负责如闩 、事件等待、队列锁、实例锁等通用并发控制,也对如对象状态、进程间消息、系统统计等后台数据结构和用户进程和会话进行管理。

锁管理层(KJ) 锁管理层负责并行服务数据库实例的锁的同步和通讯。

通用层(KG) 通用层负责对用于更高层的如链接清单等通用数据结构进行管理,尤其是用于共享池和会话的库缓冲和内从分配堆。

操作系统依赖层(S) oracle使用了一些操作系统功能,如I/O,进程调度,内存管理和其他功能。这些功能的实现细节依赖于操作系统的,所以把这些功能脱离出来分成一个单独层。

1.2  内核服务 本书包含了等待事件、闩 、锁、内存等内核服务。虽然你很少能对这些服务进行调优,但你对oracle的其他方面进行调优就需要理解这些服务。 第二章:等待事件统计是oracle高级性能调优中最重要的统计项。本章介绍了如何收集和使用这些统计项。

第三章:oracle中大量使用闩 ,高级性能调优经常要防止闩竞争。本章通过讲解如何使用闩,对这类调优建立了基础。

第四章:oracle使用了很多类型的锁。本章讲解如何使用锁,如何诊断锁的问题。

第五章:oracle并行服务技术扩展了oracle调优的规模。本章讲解了并行服务锁是如何执行的,统计项意味着什么。

第六章:本章讲解了oracle的内部内存管理是如何工作的。特别注意共享池的内部工作机理,以及核定是否大小正确。

尽管这部小书涵盖了oracle的很多内部信息,但这些章节的内容只是为你进行高级性能调优提供了一个基础。


上一篇     下一篇