第六讲Oracle数据库服务器例程
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Oracle server
用户
2021/1/15
服务进程的特点
• 在ORACLE SERVER所在的机器上运行 • 在专用服务配置中只对一个用户进程服
务 • 使用不同的 PGA • 处理由客户产生 的请求 ,并将结果返回
客户
2021/1/15
专用服务器方式
后台进程
为每个用户单独开设一 个服务器进程。 不设置参数: MTS_SERVICE MTS_DISPATCHERS MTS_SERVERS MTS_LISTERNET_ADDRESS
2021/1/15
注意:
直到Oracle在LGWR完成将重做信息从 重做缓冲区刷新到联机重做日志文件之 后, Oracle才认为一个事务已完成。在 LGWR成功地将重做日志项写入联机重 做文件时(并不是改变数据文件中的数 据时),将一个成功码返回给服务器进 程。
2021/1/15
写日志文件
• 当提交事务处理时( Commit ) • 当重做日志缓冲区的三分之一已满时 • 当重做日志缓冲区中记录了超过1 MB 的
2021/1/15
程序全局区 ( PGA )
服务进程 PGA
程序全局区(PGA) 是一块内存区域, 它包含一个服务进程或后台进程的数 据和控制信息。PGA 又称为进程全局 区( process global area),即一个 进程独占的区域,在进程创建时分配 ,进程终止时释放,其他进程不能访 问。
• MTS_LISTERNET_ADDRESS: SQL*NET监听器地址
• MTS_MAX_SERVERS: 服务器进程的最大数
2021/1/15
6.2.3 后台进程
为了优化性能并协调多个用户,服务器 进程在执行用户请求的过程中,将调用 后台进程实现对数据库的操作。大部分 后台进程在实例启动时自动建立。
日志缓冲区(Log Buffer)
• 重做日志缓冲区用于在内存中存储未被刷新写入 联机重做日志文件的重做信息。它是循环使用的 缓冲区,当重做日志缓冲区填满时,将它的内容 写入联机重做日志文件。
• 重做日志缓冲区的大小是由L O G _ B U F F E R 初始化参数决定,以字节为单位。
• 所有服务进程(SERVER PROCESS)将重作记 录写入重作日志 缓冲
2021/1/15
数据字典缓冲(Data Dictionary Cache)
• 数据字典缓冲 保存最近使用过的数据字 典信息如表和列的定义,用户名口令和 权限。
• 在分析阶段,服务进程 查找缓冲中的信 息以解释语句中指定的对象名并验证访 问权限。如有必要服务进程可请求从数 据文件中装入这些信息
2021/1/15
2021/1/15
写数据文件
数据缓冲区
Oracle服务器使用延迟、多个块写以减 缓磁盘I / O的冲突: •灰数据缓冲区的数量达到阈值; •当进行扫描而无法找到任何空闲缓冲区时 进程扫描了指定数量的块; •出现超时每三秒; •出现检查点(检查点是使数据库缓冲区高 速缓存与数据文件同步的一种方法)
数202据1/1文/15 件
2021/1/15
数据库数据缓冲区 (Database Buffer Cache)
• 在oracle 9i 中, 使用DB_BLOCK_SIZE 来 决定,并且可以通过下面的命令动态的改变其 大小:
ALTER SYSTEM SET DB_CACHE_SIZE = 120M;
• 处理查询时,服务进程在数据库缓冲区 中寻 找所需的数据块。如果在缓冲区中找不到所需 数据块,服务进程从数据文件中将数据块读入 缓冲区。以后对同样数据块的请求在内存中进 行,不需物理读写。
PMON SMON RECO
Shared Pool
SGA
Database Buffer Cache
Redo Log Buffer
CKPT
DBWR
LGWR
GMS ARCH
Remote DB
2021/1/15
DB Files
Log Files
Archive Logs
数据库写入进程DBWR
服务器进程在数据缓冲区中记录回退和 数据块的更改。数据库写入程序(DBWn) 将数据缓冲区中所有修改过的缓冲块数 据写到数据文件中,它确保有足够数量 的空闲缓冲区在数据缓冲区中可用。该 进程在启动实例时自动启动。
2021/1/15
SGA
服务器进程 服务器进程
用户进程
用户进程
专用服务器进程响应用户进程过程
• 客户端应用程序向Oracle例程发出一个连接 请求
• 服务器上的监听程序探测到用户请求,并生成 一个专用服务进程来对用户登陆信息加以确认
• 用户执行查询操作 • 专用进程执行用户查询操作中的所有源代码程
当LGWR停止向一个联机重做日志文件组写入并开始 向另一个联机重做日志组写入时,就发生了日志切换 。 • 当已通过正常事务处理或者立即选项关闭例程时( normal, transactional, immediate )
2021/1/15
6.2 Oracle9i进程管理
• 6.2.1 Oracle服务器 • 6.2.2 服务进程 • 6.2.3 后台进程
2021/1/15
6.2.1 Oracle 服务器
Oracle服务器是一种对象关系数据库管 理系统,由Oracle实例和Oracle数据库两 部分组成。SGA和后台进程合称为一个 Oracle实例
更改时 • 在DBWR将数据库缓冲区高速缓存中修
改的块写入数据文件以前 • 发生LGWR超时(3秒)
2021/1/15
检查点进程CKPT
检查点操作是一个事件,当发生该事件 时,CKPT进程会将脏缓存块写入数据文 件的任务交给DBWR进程完成,并且会 修改控制文件和数据文件头部(如将检查 点时刻的scn值写入到控制文件和数据文 件头部),这样达到了同步数据库的所有 数据文件、控制文件和联机重做日志文 件的目的,同时表示该进程已成功完成 。
大缓冲池(Large pool)
这个内存结构最早是在Oracle 8.0引入的,其大 小由LARGE_POOL_SIZE决定,在以下情况使 用: • 使用MTS配置时,因为要在SGA中分配UGA来保 持用户的会话,就是用Large_pool来保持这个会 话内存 • 在执行并行处理语句(如并行查询)的时候,要 分配进程间消息缓冲区的内存,就是用这个内存 结构来协调并行处理。 • 使用RMAN做备份的时候,要使用Large_pool这 个内存结构来做磁盘I/O缓存器。
2021/1/15
Oracle 服务器
应用/网络服务器
2021/1/15
服务器
用户
6.2.2 服务进程
服务器进程处理与应用程序相连的用户 进程的请求,它与用户进程相通讯,为 相连的用户进程的Oracle请求服务。
2021/1/15
连接数据库
客户
Server process
服务器
User process
2021/1/15
重做日志缓冲区的查询
• 在初始化参数文件中查找log_buffer参 数
• 查询数据字典v$parameter
sql>select name,value from v$parameter where name like '%buffer'; • 使用show命令查询
sql>show parameter log_buffer
2021/1/15
检查点发生的条件
• 当数据库管理员手动请求时。 即使用SQL 命令:
ALTER SYSTEM CHECKPOINT • 当达到初始化参数LOG_CHECKPOINT_INTERVAL、
LOG_CHECKPOINT_TIMEOUT 和FAST_START_IO_TARGET 设置时 • 每次日志切换时(Log Switch)
• 缓冲区用LRU(Least Recently Used)置换算 法,在检查点发生时由DBWR写入数据文件
2021/1/15
数据缓冲区的查询
• 如果要查询数据缓冲区的大小,可以按 如下方法查找: sql>show parameter db
• 也可以通过动态性能视图 v$buffer_cache来监视缓存的使用情况 。 Sql>select * from v$buffer_cache;
2021/1/15
源自文库
Java池
• Oracle8i引入的一项新特性(从8.1.5版本 后开始出现的),用于支持数据库中java 的运行,负责容纳与会话有关的Java代码 ,以及要由Java虚拟机(JVM)用到的一 些数据。
• 大小由初始化参数文件中的 java_pool_size指定
2021/1/15
2021/1/15
SGA
Shared pool Library cache
Data dict. cache
Data buffer cache
Large pool
Redo log buffer
Java pool
2021/1/15
共享池(share pool)
共享池
库缓冲
字典缓冲
– 大小由 SHARED_POOL_SIZE 定义 – 库缓冲包含语句文本, 编译后的代码以及
序
2021/1/15
多线程服务器方式
通过调度器为每个用户 进程分配服务器进程。
后台进程
SGA
用户进程
2021/1/15
服务器进程 服务器进程
调度器
用户进程
用户进程
MTS相关的参数涵义
• MTS_SERVICE: 服务器名,缺省值为DB_NAME
• MTS_DISPATCHERS: 调度器个数
• MTS_SERVERS: 可以启动的服务器进程的个数
2021/1/15
• 必须的后台进程
DBWn
PMON
LGWR
SMON
• 可选的后台进程
ARCn
LMDn
CJQ0
LMON
Dnnn
LMS
LCKn
Pnnn
2021/1/15
CKPT
QMNn RECO Snnn
后台进程
network shared memory
disk IO
LMD0 LCKn LMON
Clustered Instances
共享池大小查询
• 在参数文件中查询初始化参数 shared_pool_size
• 查询数据字典v$parameter
sql>select name,value from v$parameter where name like '%size'; • 使用show命令查询
sql>show parameter shared_pool_size
2021/1/15
DBWn延迟写入事件
• 灰数据缓冲区的数量达到阈值。 • 当进行扫描而无法找到任何空闲缓冲区
时 • DBWR 后台进程发生超时(大约每3秒
) • 发生检查点
2021/1/15
日志写入进程LGWR
当运行DML或DDL语句时,服务器进程首 先要将事务变化记载到重做日志缓冲区,然 后才会将数据写入到数据缓冲区,并且重做 日志缓冲区的内容将来会被写入到联机重做 日志文件中,以避免系统出现意外时所带来 的数据损失。将重做日志缓冲区的重做日志 条目写入到联机重做日志文件的过程由后台 进程LGWR来完成的。
• 在事务提交时由 LGWR写入日志文件
2021/1/15
日志缓冲区 日志文件
写日志文件
L G W R执行写入操作的条件是: • 发生提交(commit) • 重做日志缓冲区满度达到三分之一或3秒 • 在DBW0 将数据库缓冲区高速缓存中修改 的块写入数据文件以前 • 写满1M
因此,太大的redo log buffer是没有意义的, 因为真正用于生产的时候,很少有3秒内没有 提交事务的应用,而且,每到1M就会写redo log file,所以,大多数情况下,超过3M的 redo log buffer几乎就浪费了。
第六讲 Oracle数据库服务器例程
本章学习目标 Oracle数据库服务器是一个对象关系型 数据库管理系统,由数据库文件和实例 组成。本章将介绍Oracle服务器的例程 结构,包括内存管理和后台进程。
2021/1/15
6.1.1 系统全局区(SGA)
系统全局区是ORACLE系统为实例分配的一 组共享缓冲存储区,用于存放数据库数据 和控制信息,以实现对数据库数据的管理 和操作。
执行计划等 – 字典缓冲包括表和列的定义和权限等
2021/1/15
库缓冲(Library cache)
• 库缓冲 保存最近用过的SQL语句和PL/SQL使 用过程中的下列信息: – 语句文本 – 分析树,即编译后的语句 – 执行计划,即优化器定义的语句执行步骤
• 库缓冲 又称为共享SQL区。由于 库缓冲 保存 了这些信息,所以当一查询在执行计划被换出 之前重新执行时,服务进程不必重新分析语句 ,因此 库缓冲 能改善应用的性能。.