Oracle数据库开发实用教程第七章.ppt
文本预览下载声明
Oracle 11g实用教程;内容概要;Oracle数据库实例;Oracle实例概述;在启动数据库时,
Oracle首先,在内存中获取一定的空间,启动各种用途的后台进程,即创建一个数据库实例。
然后,由实例装载数据文件和重做日志文件。
最后,打开数据库。
用户操作数据库的过程实质上是与数据库实例建立连接,然后通过实例来连接、操作数据库的过程。;数据库与实例的关系
单实例数据库系统;实例组成
内存结构:系统全局区(SGA)和程序全局区(PGA)
后台进程组成 ;实例
;Oracle内存结构;SGA
SGA是由Oracle分配的共享内存结构,包含一个数据库实例共享的数据和控制信息。当多个用户同时连接同一个实例时,SGA数据可供多个用户共享,SGA又称为共享全局区(Shared Global Area)。
用户对数据库的各种操作主要在SGA中进行。该内存区随数据库实例的创建而分配,随实例的终止而释放。
PGA
PGA是在用户进程连接数据库、创建一个会话时,由Oracle为用户分配的内存区域,保存当前用户私有的数据和控制信息,因此该区又称为私有全局区(Private Global Area)。
每个服务器进程只能访问自己的PGA,所有服务器进程的PGA总和即为实例的PGA的大小。;SGA;(1)数据高速缓冲区;数据高速缓冲区的工作过程
数据高速缓冲区由许多大小相等的缓存块组成。;缓冲块的类型
脏缓存块(Dirty Buffers)
保存的是已经被修改过的数据。当一条SQL语句对某个缓存块中的数据进行修改后,这个缓存块就被标记为脏缓存块。它们最终将由DBWR进程写入数据文件,以永久性地保存修改结果。
空闲缓存块(Free Buffers)
不包含任何数据,它们等待后台进程或服务器进程向其中写入数据。当Oracle从数据文件中读取数据时,将会寻找空闲缓存块,以便将数据写入其中。
命中缓存块(Pinned Buffers)
正被使用,或者被显式地声明为保留的缓存块。这些缓存块始终保留在数据高速缓冲区中,不会被换出内存。 ;缓存块的管理
脏缓存块列表:包含那些已经被修改但还没有写入数据文件的脏缓存块。
LRU列表(Least Recently Used):包含——
所有的空闲缓存块
命中缓存块
那些还没有来得及移入到脏缓存块列表中的脏缓存块。
说明:在该列表中,最近被访问的缓存块被移动到列表的头部,而其他缓存块向列表尾部移动,最近最少被访问的缓存块最先被移出LRU列表,从而保证最频繁使用的缓存块始终保存在内存中。;数据高速缓冲区大小
数据高速缓冲区越大,缓存命中率越高,从而减少了Oracle访问硬盘数据的次数,提高了数据库系统执行的效率。然而,如果数据高速缓冲区的值太大,Oracle就不得不在内存中寻找更多的块来定位所需要的数据,反而降低了系统性能。显然,需要确定一个合理的数据高速缓冲区大小。
通过查询动态性能视图V$SGA_DYNAMIC_COMPONETS查看数据高速缓冲区的构成情况。
使用ALTER SYSTEM语句动态修改参数DB_CACHE_SIZE(标准块),从而调整数据高速缓冲区的大小。;(2)重做日志缓冲区;重做日志缓冲区的工作过程 ;重做日志缓冲区的大小
较大的重做日志缓冲区,可以减少对重做日志文件写的次数,适合长时间运行的、产生大量重做记录的事务。
使用ALTER SYSTEM语句动态修改参数LOG_BUFFER,以调整缓冲区大小。;(3)共享池;数据字典缓存区
保存最常用的数据字典信息。
共享池大小
由SHARED_POOL_SIZE参数指定。
合适的共享池大小,可使编译过的程序代码长驻内存,大大降低重复执行相同的SQL语句、PL/SQL程序的系统开销,从而提高数据库的性能。 ;(4)大型池 ;(5)Java池 ;(6)流池 ;SGA的管理;SGA自动管理
通过设置初始化参数SGA_TARGET,可以实现对SGA中的数据高速缓冲区、共享池、大型池、Java池和流池的自动管理,即这几个组件的内存调整不需要DBA来干预,系统自动进行调整。
但是对于日志缓冲区、非标准块的数据高速缓冲区、保留池、回收池等其他区域的调整还需要DBA使用ALTER SYSTEM语句手动进行调整。;设置SGA自动管理的方法
计算参数SGA_TARGET的大小:
设置参数SGA_TARGET
通过ALTER SYSTEM语句设置参数SGA_TARGET的值,该值可以是上一步计算出来的结果,也可以是当前SGA大小与SGA_MAX_SIZE之间的某个值。
将SGA中与自动管理相关的组件大小设置为0:;
如果要取消自动管理,只需将参数SGA_TARGET设置为0即可。 ;PGA;Oracle进程概述;用户进程
当用户连接数据库
显示全部