Preface 前 言 为什么要写这本书 2008年的某一天,我怀着激动的心情参加了支付宝公司的面试,这次面试让我对国内最前沿的数据库自动化运维技术有了初步的认识,对我的职业生涯影响非常大,时刻激励着我以后不管遇到什么困难或者诱惑,Oracle始终都是我追逐的爱好和目标. 在接下来几年的工作中,我较为深入地研究了C语言数据结构.Linux操作系统原理以及Shell(PHP/Java)编程等知识,这些技术能够很好地支撑Oracle运维管理.同时,多年的经验告诉我,对集运维与开发于一体的Oracle
**第1章Linux下的Oracle 1.0**众所周知,Oracle数据库与Linux操作系统是行业内使用最为广泛.功能最为强大的数据库/操作系统之一.随着企业业务的不断发展,越来越多的Oracle数据库被部署在Linux环境中,以提供核心业务数据的支撑.与此同时,随着人们对Oracle运维管理经验的不断积累,大部分数据库管理员对Linux环境下的Oracle认识也越来越深刻,然而也有部分数据运维人员对于Linux环境下的Oracle内存分配存在疑惑.本章就Oracle与Linux内存关系进行
第1章 Linux下的Oracle 众所周知,Oracle数据库与Linux操作系统是行业内使用最为广泛.功能最为强大的数据库/操作系统之一.随着企业业务的不断发展,越来越多的Oracle数据库被部署在Linux环境中,以提供核心业务数据的支撑.与此同时,随着人们对Oracle运维管理经验的不断积累,大部分数据库管理员对Linux环境下的Oracle认识也越来越深刻,然而也有部分数据运维人员对于Linux环境下的Oracle内存分配存在疑惑.本章就Oracle与Linux内存关系进行讲解,帮助读
2.4 Buffer Cache 2.4.1 Buffer(Cache)Pool 1. Buffer(Cache)Pool组成结构 Oracle Buffer Cache由3个Buffer Pool组成,如图2-9所示. 其中: Default Pool:默认池,用于缓存常规数据: Keep Pool:保留池,主要用于缓存频繁更新的小表: Recycle Pool:回收池,用于缓存随机使用的大表. 2. Buffer Pool与Working Set Buffer Pool与Working Se
1.4 Linux内存体系与Oracle内存空间1.4.1 Linux用户空间与内核空间 一般来说,Linux操作系统把虚拟地址空间划分为用户空间和内核空间.例如x86架构下的32位Linux虚拟地址空间是4GB(0x0000 0000-0xffff ffff),其中大致将前3GB(0x0000 0000-0xbfff ffff)划分为用户空间,后1GB(0xc000 0000-0xffff ffff)划分为内核空间. 用户程序只能在用户模式(用户空间)下执行,而不能访问特权模式(内核空间)的数
1.5 小结 本章主要介绍了Linux环境下Oracle用户空间与系统空间的关系,结合Oracle SGA与PGA分配规则,着重对Linux内核参数kernel.shmall和kernel.shmmax进行介绍,帮助读者规划Linux环境下Oracle内存分配的同时,还提供了Oracle内存优化的一个重要途径. 参考文档 [1] Database Installation Guide for Linux(Oracle Corporation)
2.3 Library Cache2.3.1 Library Cache与SQL游标 Library Cache主要用于存放SQL游标,而SQL游标最大化共享是Library Cache优化的重要途径,可以使SQL运行开销最低.性能最优. 1. SQL语句与父游标及子游标 在PL/SQL中,游标(Cursor)是数据集遍历的内存集合.而从广义上讲,游标是SQL语句在Library Cache中的内存载体.SQL语句与游标关系如下: 1)一条SQL语句包含一个父游标(Parent Cursor)和
1.3 Linux内存体系的优势 许多接触过Oracle的朋友可能会有一些感慨,在Windows操作系统和Linux操作系统下管理Oracle是完全不一样的.其实不尽然,Windows下的Oracle在服务中只能看见一个类似ORCL的服务,同时在Windows任务管理器中也只能看见一个Oracle进程,而数据库后台进程则不可见. Windows下的Oracle服务,如图1-1所示. 图1-1 Windows下的Oracle服务 Windows任务管理器中的Oracle进程,如图1-2所示. 图1
2.2 队列锁(Enqueue Lock)2.2.1 Lock与Latch的区别 Oracle锁(Lock)也被称为队列锁(Enqueue Lock),而Latch则被称作为"细粒度"的锁.Lock与Latch的区别如表2-1所示. 不难看出: Oracle使用Latch保护内存数据被间歇地.短持续地访问: Latch不适合保护持续时间相对较长的资源(Resource),在这种情况下,就需要使用Lock持续锁定: Lock允许并发等待:当前不可获取的Resource会被放入请求队列中进
3.4 Redo优化从前面的内容可以知道,Oracle Redo的产生主要是由DML事务引起的,与DML事务相关的数据库更改主要包含:数据块更改:回滚段数据块镜像更新:数据库内部信息更新(数据字典表更新).可以通过日志挖掘获取数据库更改的相关信息,如下: 可以看到,Redo中记录了DML事物的数据块更改.回滚段更新等信息.因此,可以考虑采取以下措施来减少Redo的产生,从而达到优化Redo的目的:减少索引键更新操作:减少大表(键)更新操作:使用Direct Load加载数据:使用Nologgin