当前位置:文档之家› Oracle体系结构详解

Oracle体系结构详解

Oracle体系结构详解
Oracle体系结构详解

Oracle体系结构就是围绕这张图展开的,要想深入了解oracle,就必须把这张图搞明白。如图:

一、基本组成:

Oracle server:

一般情况下是一个instance和一个database组成

1个instance只能对应一个数据库。

特殊:1个数据库可以有多个instance(rac)

一台服务器上同时可装多套版本的数据库软件,每个数据库软件可建多个数据库,但是每个数据库只对应一个instance,也可以理解成每个数据库只有一个SID 。

利用DBCA建出的每个库都是相对独立的,在同一服务器上如果创建多库必须将环境变量的参数文件做区分,并且在对实例切换时需如下操作:

connect 用户名/密码@实例的服务名

Oracle Instance:

是由内存(SGA)和后台进程(backupground Process)组成

通过instance来访问database

一个实例只能打开一个数据库

Oracle database:

数据文件(Data files):

数据文件永远存储数据库的数据,包括数据字典、用户数据(表、索引、簇)、undo数据等

重做日志(Redo log):

“先记后写”

重做日志用于记录数据库的变化,当进行例程恢复或介质恢复时需要使用重做日志

执行DDL或DML操作时,事物变化会被写到重做日志缓冲区,而在特定的时刻LGWR会将重做日志缓冲区中的内容写入重做日志。

控制文件(Control file)

控制文件用于记录和维护数据库的物理结构,并且每个Oracle数据库至少要包含一个控制文件。

归档日志(Archive log):

是非活动(Inactive)重做日志的备份。

口令文件(Password file):

用于验证特权用户(具有SYSDBA、SYSOPER权限的特殊数据库用户)

参数文件(Parameter file):

用于定义启动实例所需要的初始化参数,包括文本参数文件(pfile)和服务器参数文件(spfile)(二进制文件放入裸设备,引入spfile)

User and Server process :

在执行sql语句时产生的进程,每一个连接,oracle server创建一个session,产生一个server process,在client发起一个connection时就产生了一个user process。

体系结构可以分为,database结构和instance结构

如下结构:

二、instance结构详解

1、内存结构

主要包括sga(system global area)和pga(program global area)

Pga是当程序起来时,给server process用(排序,数据挖掘等order by)

SGA(System Global Area)由一组内存结构组成,它是由所有用户进程共享的一块内存区域。启动例程时,Oracle自动分配SGA,关闭例程时,oracle自动释放SGA所占用的内存空间。

Sga包括,share pool,db buffer cache,redo log buffer,large pool,java pool。

在9i 中我们都知道在管理Oracle中使用动态SGA时,Granule(是连续虚拟内存分配的单位)的大小是和SGA的大小有关系。

SGA 分配的最小单元为一个granule.Oracle SGA的大小总是granule的整数倍,即分配是以整数个granule来分配的。

9i 中的规则如下:

linux/unix

SGA <=128 M granule 4M

SGA >128M granule 16M

Windows

SGA <=128 M granule 4M

SGA >128M granule 8M

10g 中的分配规则为

linux/unix

SGA <=1G granule 4M

SGA >1G granule 16M

Windows

SGA <=1G granule 4M

SGA >1G granule 8M

SQL> select component, granule_size from v$sga_dynamic_components; COMPONENT GRANULE_SIZE

---------------------------------------------------------------- ------------

shared pool 4194304

large pool 4194304

java pool 4194304

streams pool 4194304

DEFAULT buffer cache 4194304

KEEP buffer cache 4194304

RECYCLE buffer cache 4194304

DEFAULT 2K buffer cache 4194304

DEFAULT 4K buffer cache 4194304

DEFAULT 8K buffer cache 4194304

DEFAULT 16K buffer cache 4194304

DEFAULT 32K buffer cache 4194304

ASM Buffer Cache 4194304

13 rows selected.

Elapsed: 00:00:00.06

SQL>

SQL> desc v$sga_dynamic_components;

Name Type

--------------------------------------------------------

COMPONENT VARCHAR2(64)

CURRENT_SIZE NUMBER

MIN_SIZE NUMBER

MAX_SIZE NUMBER

USER_SPECIFIED_SIZE NUMBER

OPER_COUNT NUMBER

LAST_OPER_TYPE VARCHAR2(13)

LAST_OPER_MODE VARCHAR2(9)

LAST_OPER_TIME DATE

GRANULE_SIZE NUMBER

SQL>

SQL> select * from v$sga_dynamic_components;

COMPONENT CURRENT_SIZE MIN_SIZE MAX_SIZE USER_SPECIFIED_SIZE OPER_COUNT LAST_OPER_TYP LAST_OPER LAST_OPER GRANULE_SIZE

-------------------- ------------ ---------- ---------- ------------------- ---------- ------------- --------- --------- ------------

shared pool 92274688 92274688 0 0 0

STATIC 4194304

large pool 4194304 4194304 0 0 0

STATIC 4194304

java pool 4194304 4194304 0 0 0

STATIC 4194304

streams pool 0 0 0 0 0

STATIC 4194304

DEFAULT buffer cache 62914560 62914560 0 0 0 INITIALIZING 4194304

KEEP buffer cache 0 0 0 0 0

STATIC 4194304

RECYCLE buffer cache 0 0 0 0 0

STATIC 4194304

DEFAULT 2K buffer ca 0 0 0 0 0

STATIC 4194304

DEFAULT 4K buffer ca 0 0 0 0 0

STATIC 4194304

DEFAULT 8K buffer ca 0 0 0 0 0

STATIC 4194304

DEFAULT 16K buffer c 0 0 0 0 0

STATIC 4194304

DEFAULT 32K buffer c 0 0 0 0 0

STATIC 4194304

ASM Buffer Cache 0 0 0 0 0

STATIC 4194304

13 rows selected.

Buffer Cache Size

数据缓存,调高数据命中率可以提高性能。按数据块存放。

db_cache_size

db_keep_cache_size

db_recycle_cache_size

alter system set db_cache_size = xxx M

SQL> show parameter advice

NAME_COL_PLUS_SHOW_PARAM TYPE VALUE_COL_PLUS_SHOW_PARA M

--------------------------------------------------------------------------------

db_cache_advice string ON

SQL>

SQL> select * from v$db_cache_advice;

SQL>

Large Pool Size rman 和一些并行处理时候会用到。

Java Pool Size java存储过程的支持

Streams Pool Size

Oracle 10g 中sga_target自动调整只是针对这四项:data buffer cache, large_pool, shared_pool, java_pool

1)03:41:30 SQL> show sga

2)

3)Total System Global Area 285212672 bytes

4)Fixed Size 1218992 bytes

5)Variable Size 71304784 bytes

6)Database Buffers 209715200 bytes

7)Redo Buffers 2973696 bytes

8)04:45:40 SQL>

9)

04:46:18 SQL> select name,bytes/(1024*1024) ,resizeable from v$sgainfo;

10)

11)NAME BYTES/(1024*1024) RES

12)-------------------------------- ----------------- ---

13)Fixed SGA Size 1.16252136 No

14)Redo Buffers 2.8359375 No

15)Buffer Cache Size 200 Yes

16)Shared Pool Size 60 Yes

17)Large Pool Size 4 Yes

18)Java Pool Size 4 Yes

19)Streams Pool Size 0 Yes

20)Granule Size 4 No ;区组大小为4M

21)Maximum SGA Size 272 No

22)Startup overhead in Shared Pool 36 No

23)Free SGA Memory Available 0

24)

04:49:34 SQL> select sum(bytes)/(1024*1024) size_in_mb from v$sgastat;

25)

26)SIZE_IN_MB

27)----------

28)276.003071

29)

30)

04:48:19 SQL> select * from v$sgastat;

31)

32)POOL NAME BYTES

33)------------ -------------------------- ----------

34)shared pool KKJ WRK LAT 300

35)shared pool kfkhsh_kfdsg 2052

36)shared pool event statistics ptr arra 680

37)shared pool KGKP randnum 40000

38)large pool PX msg pool 206208

39)large pool free memory 3988096

40)java pool free memory 4194304

41)

42)602 rows selected.

43)

04:50:37 SQL> show parameter sga;

44)

45)NAME TYPE VALUE

46)------------------------------------ ----------- ------------------------------

47)lock_sga boolean FALSE

48)pre_page_sga boolean FALSE

49)sga_max_size big integer 272M

50)sga_target big integer 272M

SGA动态尺寸总计不能超过初始化参数SGA_MAX_SIZE的值。

如果sga_target超过了sga_max_size的大小,在Instance重新启动后,sga_max_size 会调整成和sga_target一样大小的值。

如果在初始化参数里这些内存池设置为非零,则系统启动后,这些值将作为该参数对应的最小值运行。如果那个值在系统运行时不够,则Oracle将自动为其添加容量,以帮助其优化操作,直到内存使用达到SGA_TARGET所表明的上限。

[oracle@oraserv ~]$ !sql

sqlplus '/as sysdba';

SQL*Plus: Release 10.2.0.1.0 - Production on Sat Mar 19 11:17:30 2011

Copyright (c) 1982, 2005, Oracle. All rights reserved.

Connected to an idle instance.

11:17:35 SQL> startup

ORACLE instance started.

Total System Global Area 419430400 bytes

Fixed Size 1219784 bytes

Variable Size 289407800 bytes

Database Buffers 125829120 bytes

Redo Buffers 2973696 bytes

Database mounted.

Database opened.

11:18:13 SQL> show parameter sga

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

lock_sga boolean FALSE

pre_page_sga boolean FALSE

sga_max_size big integer 400M

sga_target big integer 300M

11:18:23 SQL> alter system set sga_target=500m ;

alter system set sga_target=500m

*

ERROR at line 1:

ORA-02097: parameter cannot be modified because specified value is invalid ORA-00823: Specified value of sga_target greater than sga_max_size

11:18:38 SQL> alter system set sga_target=500m scope=spfile;

System altered.

11:18:54 SQL> startup force;

ORACLE instance started.

Total System Global Area 524288000 bytes

Fixed Size 1220360 bytes

Variable Size 176161016 bytes

Database Buffers 343932928 bytes

Redo Buffers 2973696 bytes

Database mounted.

Database opened.

11:19:30 SQL> show parameter sga;

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

lock_sga boolean FALSE

pre_page_sga boolean FALSE

sga_max_size big integer 500M

sga_target big integer 500M

11:19:38 SQL>

利用后台进程MMAN进行SGA动态管理

[oracle@oracle ~]$ ps -ef |grep ora_|grep ora_

oracle 8012 1 0 11:12 ? 00:00:00 ora_mman_prod

share pool:

共享池(Share Pool)用于存放最近执行的SQL语句和数据字典信息。

共享池主要有库高速缓存(Library Cache)和数据字典高速缓存(Dictionary cache)两部分组成

1)库高速缓存(Library Cache)

库高速缓存用于存放最近执行的sql语句信息,包括sql语句文本,解析代码值及执行计划。假设执行一条sql语句

-select ename,job from emp where empno=7788;

如果最近(还没有被lru淘汰)执行过这条语句,他就会直接从cache里面读结果;如果没有执行过,就需要读数据文件,这个过程就比较复杂,效率差距很大。

这里还有两个概念:

物理i/o和逻辑i/o---------1:1000

物理i/o:从数据缓冲区找不到所需要的数据,就要从硬盘里面读取。

逻辑i/o:从数据缓冲区能找到所需要的数据,

理论上讲一个数据库性能是否良好,这个逻辑i/o应该占95%以上

2)、数据字典高速缓存区(Dictionary cache)

用于存放数据字典的信息,包括表、列定义以及权限信息)

库高速缓存和数据字典高速缓存大小是动态变化的,不是固定的。

SQL> alter system set share_pool_size=60m;

DB buffer

数据高速缓存(Database Buffer cache)用于存放最近访问的数据块信息,它由许多小缓冲区(缓冲区大小=数据尺寸)组成

Db_cache_size 定义标准的高速缓存尺寸

Db_nk_cache_size 定义非标准的高速缓存尺寸

数据库高速缓存区:

Db_cache_size Default 默认池,所有段都被默认高速缓存到默认池。(采用LRU)

Db_keep_cache_size ,确保某些数据块始终被保留到内存中

Db_recycle_cache_size ,数据高速缓存区“回收池”

Redo log buffer

重做日志缓存区(Redo log buffer),用于记载实例的变化。执行DDL或DML 语句时,服务器进程首先将事物的变化记载到重做日志缓存区,然后才会修改数据高速缓存。

重做日志缓存区由很多重做记录(Redo record)组成,并且每条重做记录记载了被修改数据块的位置以及变换后的数据

Large pool

PGA(Program Global Area)

用于存放服务器进程的数据和控制信息,独立于SGA的一块内存区域。

当用户连接到Oracle Server时,Oracle server会为每个服务器进程分配相应的PGA. SGA是所有服务器进程都可共享那个的一块内存区域,而每个服务器进程都具有私有的PGA内存空间。

客户端在通过sql语句连接database时,必须通过实例Instance来连接和管理数据库。Connection:客户端进程和服务端进程建立通讯。

Session:当用户经过Oracle server认证后开始建立会话,直到用户退出登录,会话结束2、进程结构

用户进程

server进程

当客户端运行应用程序时,会启动形影的应用进程,该进程称为用户进程;

当连接到Oracle Server 时,Oracle在服务器端会为用户进程派生一个新的进程

后台进程

启动实例时,Oracle不仅会分配SGA,还会启动后台进程。[oracle@oraserv ~]$ ps -ef |grep ora_

oracle 4694 1 0 01:18 ? 00:00:01 ora_pmon_orcl oracle 4696 1 0 01:18 ? 00:00:00 ora_psp0_orcl oracle 4698 1 0 01:18 ? 00:00:00 ora_mman_orcl oracle 4700 1 0 01:18 ? 00:00:00 ora_dbw0_orcl oracle 4702 1 0 01:18 ? 00:00:00 ora_lgwr_orcl oracle 4704 1 0 01:18 ? 00:00:06 ora_ckpt_orcl oracle 4706 1 0 01:18 ? 00:00:01 ora_smon_orcl oracle 4708 1 0 01:18 ? 00:00:00 ora_reco_orcl oracle 4710 1 0 01:18 ? 00:00:02 ora_cjq0_orcl oracle 4712 1 0 01:18 ? 00:00:01 ora_mmon_orcl oracle 4714 1 0 01:18 ? 00:00:01 ora_mmnl_orcl oracle 4716 1 0 01:18 ? 00:00:00 ora_d000_orcl oracle 4718 1 0 01:18 ? 00:00:00 ora_s000_orcl oracle 4722 1 0 01:18 ? 00:00:00 ora_arc0_orcl oracle 4724 1 0 01:18 ? 00:00:00 ora_arc1_orcl oracle 4728 1 0 01:18 ? 00:00:00 ora_qmnc_orcl oracle 4741 1 0 01:18 ? 00:00:00 ora_q000_orcl oracle 4743 1 0 01:18 ? 00:00:00 ora_q001_orcl oracle 5467 1 0 03:46 ? 00:00:00 ora_j000_orcl

[oracle@oraserv ~]$

03:50:01 SQL> select paddr,name,description from v$bgprocess where paddr<>'00';

PADDR NAME DESCRIPTION

-------- ----- ----------------------------------------------------------------

30E16830 PMON process cleanup

30E16DE4 PSP0 process spawner 0

30E17398 MMAN Memory Manager

30E1794C DBW0 db writer process 0

30E1B808 ARC0 Archival Process 0

30E1BDBC ARC1 Archival Process 1

30E1C370 ARC2 Archival Process 2

30E17F00 LGWR Redo etc.

30E184B4 CKPT checkpoint

30E18A68 SMON System Monitor Process

30E1901C RECO distributed recovery

30E195D0 CJQ0 Job Queue Coordinator

30E1C924 QMNC AQ Coordinator

30E19B84 MMON Manageability Monitor Process

30E1A138 MMNL Manageability Monitor Process 2

DBWn

DBWR,用于将数据高速缓存的脏缓冲区数据写入到数据文件中

默认情况下只有一个DBWR0进程,通过db_writer_process 可以定义最多10个DBWR进程(DBWR0-DBWR9).

DBWR工作触发条件:

1、系统发出检查点(CheckPoint)

如:alter system checkpoint local; 这是手动操作。

2、脏数据块达到阀值

3、服务器进程不能找到空闲的缓冲区

4、超时(脏数据)

5、rac ping

6、删除或截断表(表空间的相关操作只写表空间相关的内容)

7、表空间正常脱机(ALTER TABLE … OFFLINE NORMAL)

8、开始表空间备份(ALTER TABLESAPCE ...BEGIN BACKUP )

rac ping官方解释:

Every few seconds, the process in one instance sends messages to each instance. The message is received by PING on the target instance. The time for the round trip is measured and collected.

rac ping是用ops时的概念了,现在已经不用这个概念了,或许没有这个概念了。

Lgwr

LGWR,用于将重做日志缓冲区所记载的全部内容写入到重做日志文件中。Oracle 总是“先日志后修改”(先记载变化然后修改数据);

在DBWR工作之前,LGWR首先将事务变化写入到重做日志。LGWR工作触发条件:

1、提交事务(commit)

2、每隔3秒钟

3、当重做日志信息超过1M

4、重做日志缓冲区超过1/3满

5、在DBWR进程将脏缓冲区写入到数据文件前

思考:

checkpoint时会不会导致lgwr写?

在实例启动失败的情况下,SMON做以下的恢复:

Instance recovery

1、REDO,重新应用那些被记载的重做日志,但尚未记载的数据文件的数据。因为所有被提交的事务已经记载到了重做日志,所以可以确保恢复事务数据。(前滚)

2、打开数据库,在打开数据库时,既包含了被提交的数据,也包含了未被提交的数据(加锁)。

3、Undo,取消未提交的数据。打开数据库之后,Oracle会自动使用Undo段回退未提交的数据。(回滚)

整合空闲空间

临时段

PMON,用于监视服务器进程的执行,并且在服务器进程失败时清除该服务器进程。

用户例程意外终止运行时,PMON可以轮询检测该服务进程,并执行以下操作:

1、回退用户的当前事务

2、释放服务器进程所占用的所有表锁和行锁

3、释放用户所占用的其他资源

Checkpoint

CKPT,用于发出检查点(CheckPoint),检查点会同步数据库的数据文件和控制文件、重做日志)。

当发出检查点时,后台进程CKPT将检查点时刻的SCN(System Change Number)写入到控制文件、和数据文件头部,同时会促使后台进程DBWR将所有的脏缓冲区写入到数据文件中。

当发出检查点时,不仅后台进程CKPT和DBWR要开始工作,LGWR也会将重做日志缓冲区写入到重做日志,从而确保数据文件、控制文件、重做日志的一致性。

CKPT工作触发条件:

1、日志切换(包括手动:ALTER SYSTEM SWITCH LOGFILE,手动归档应该也可以)

2、关闭实例(shutdown abort除外)

3、手工检查点操作(alter system checkpoint)

4、热备

5、当运行ALTER TABLESPACE/DATAFILE READ ONLY的时候

6、手动设置fast_start_mttr_target

检查点发生后,他会立马做出如下事件:

1、更新数据文件头部

2、更新控制文件

主要是scn,用于恢复,chpt发生的频率越高,恢复的时间越短,频率高了,数据库性能可能有影响;所以设置这个参数的时候要慎重。

ORACLE 体系结构详解

ORACLE 体系结构 (Architecture of ORACLE) 第一部分:ORACLE8i体系结构 第一章. 概要 在本章里你可以了解以下内容 1、理解ORACLE 实例的组成 2、理解ORACLE 数据库的组成 3、理解ORACLE内存结构的组成 4、理解后台进程的作用与分工 5、理解数据库的物理文件与对应的逻辑结构 6、理解ORACLE的整体构架 第二章. 理解ORACLE实例 2.1 ORACLE SERVER ORACLE是一个可移植的数据库——它在相关的每一个平台上都可以使用,即所谓的跨平台特性。在不同的操作系统上也略有差别,如在UNIX/LINUX上,ORACLE是多个进程实现的,每一个主要函数都是一个进程;而在Windows上,则是一个单一进程,但是在该进程中包含多个线程。但是从整体构架上来看,ORACLE在不同的平台上是一样的,如内存结构、后台进程、数据的存储。 一个运行着的ORACLE数据库就可以看成是一个ORACLE SERVER,该SERVER由数据库(Database)和实例(Instance)组成,在一般的情况下一个ORACLE SERVER包含一个实例和一个与之对应的数据库,但是在特殊情况下,如8i的OPS,9i的RAC,一个SERVER中一个数据库可以对应多个实例。 一系列物理文件(数据文件,控制文件,联机日志等)的集合或与之对应的逻辑结构(表空间,段等)被称为数据库,简单的说,就是一系列与磁盘有关系的物理文件的组成。ORACLE内存结构和后台进程被成为数据库的实例,一个实例最多只能安装(Mount)和打开(Open)在一个数据库上,负责数据库的相应操作并与用户交互。 实例与数据库的关系如下图所示:

Oracle体系结构详解

Oracle体系结构就是围绕这张图展开的,要想深入了解oracle,就必须把这张图搞明白。如图: 一、基本组成: Oracle server: 一般情况下是一个instance和一个database组成 1个instance只能对应一个数据库。 特殊:1个数据库可以有多个instance(rac) 一台服务器上同时可装多套版本的数据库软件,每个数据库软件可建多个数据库,但是每个数据库只对应一个instance,也可以理解成每个数据库只有一个SID 。 利用DBCA建出的每个库都是相对独立的,在同一服务器上如果创建多库必须将环境变量的参数文件做区分,并且在对实例切换时需如下操作: connect 用户名/密码@实例的服务名

Oracle Instance: 是由内存(SGA)和后台进程(backupground Process)组成 通过instance来访问database 一个实例只能打开一个数据库 Oracle database: 数据文件(Data files): 数据文件永远存储数据库的数据,包括数据字典、用户数据(表、索引、簇)、undo数据等 重做日志(Redo log): “先记后写” 重做日志用于记录数据库的变化,当进行例程恢复或介质恢复时需要使用重做日志 执行DDL或DML操作时,事物变化会被写到重做日志缓冲区,而在特定的时刻LGWR会将重做日志缓冲区中的内容写入重做日志。 控制文件(Control file) 控制文件用于记录和维护数据库的物理结构,并且每个Oracle数据库至少要包含一个控制文件。 归档日志(Archive log): 是非活动(Inactive)重做日志的备份。 口令文件(Password file): 用于验证特权用户(具有SYSDBA、SYSOPER权限的特殊数据库用户) 参数文件(Parameter file): 用于定义启动实例所需要的初始化参数,包括文本参数文件(pfile)和服务器参数文件(spfile)(二进制文件放入裸设备,引入spfile) User and Server process : 在执行sql语句时产生的进程,每一个连接,oracle server创建一个session,产生一个server process,在client发起一个connection时就产生了一个user process。

oracle体系结构

第1章 Oracle的体系结构这一章的内容是比较枯燥的,但它是理解以后章节的基础。如果有读者在开始时有些内容没有完全理解也不用太着急,可以继续学习后面的内容,等使用了一段时间Oracle系统之后,一些概念就变得容易理解了。 1.1 Oracle引入复杂的体系结构的原因 数据库管理系统引入非常复杂的内存和外存体系结构的主要原因是有效地管理稀有的系统资源。资源不足不只是数据库管理系统所面对的。其实,在我们五千年的人类发展历史中,我们的祖先们一直在同资源不足作斗争。历史上粮食和土地等一直都是稀有资源,还记得我们的祖先们用什么方法来管理这

些稀有资源的吗?用战争,我们的先民们为粮食而战,为土地而战;我们当代人类为石油而战,为市场而战,为金钱而战。 那么在Oracle数据库中什么是稀有资源?它们又是如何来管理的呢?如果读者接触过数据库或读过相关的书,应该还有印象,数据库的数据量和输入/输出量都是相当大的,而这些数据一般都存在硬盘(外存)上,因此硬盘为数据库的一类资源。为了方便介绍,图1-1给出了硬盘的内部结构示意图。 旋转轴磁头移动臂 硬盘面磁头 图 1-1 从图1-1可以看出,所有硬盘上数据的访问都是靠硬盘的旋 11 / 56

转和磁头的移动来完成的,这种旋转和移动是机械运动。因为在计算机中所有数据的修改操作必须在内存中进行,所以内存也是数据库的一类资源。表1-1给出内存和外存的简单比较以帮助读者理解本书的内容。 表 1-1 从表1-1的比较可知,内存的数据访问速度要比外存(硬盘)快得多。这是因为内存的数据访问是电子速度,而硬盘的数据访问主要取决于机械速度。也就是说,如果一个数据库管理系统能够使绝大多数(如90%以上)数据操作在内存中完成,那么这一数据库管理系统的效率将非常高。但是由于内存中的数据在断电或出现系统故障时会消失,所以数据库管理系统还

oracle体系结构(详解)

在学习oracle中,体系结构是重中之重,掌握的越深入越好。在实际工作遇到疑难问题,其实都可以归结到体系结构中来解释,所以我们根据下面的示图了解一下oracle体系结构。 1.Summarize 根据示图,便于我们记忆,示图分三部分组成,左侧User Process、Server Process、PGA可以看做成Clinet端,上面的实例(Instance)和下面的数据库(Database)及参数文件(parameter file)、密码文件(password file)和归档日志文件(archived logfiles)组成Oracle Server,所以整个示图可以理解成一个C/S架构。Oracle Server由两个实体组成:实例(instance)与数据库(database)。这两个实体是独立的,不过连接在一起。在数据库创建过程中,实例首先被创建,然后才创建数据库。在典型的单实例环境中,实例与数据库的关系是一对一的,一个实例连接一个数据库,实例与数据库也可以是多对一的关系,即不同计算机上的多个实例打开共享磁盘系统上的一个公用数据库。这种多对一关系被称为实际应用群集(Real Application Clusters,RAC)RAC极大提高了数据库的性能、容错与可伸缩性(可能耗费更多的存储空间)并且是oracle网格(grid)概念的必备部分。 2.Client端 在Client端的作用是如何从客户端创建服务器进程与数据库进行交互的过程。 2.1 User process 用户运行一个应用程序时与Oracle数据库进程交互(例如:sql/plus)时,oracle创建一个用户进程来运行用户的应用程序。 2.2 Server process

oracle体系结构

Oracle体系结构:物理结构,逻辑结构,内存结构,数据库实例和进程,数据字典 物理结构:数据文件,日志文件,控制文件,配置文件 数据文件用来存储数据库中的全部数据,如数据库表中的数据和索引数据。通常为后缀名为.dbf格式的文件。 日志文件(又称重做日志文件),用于记录数据库所做的全部变更(如增加、删除、修改),以便在系统发生故障时,用它对数据库进行恢复。名字通常为Log*.dbf格式 控制文件每个Oracle数据库都有相应的控制文件,用于打开、存取数据库。它们是较小的二进制文件,其中记录了数据库的物理结构。名字通常为Ctr*.ctl格式 配置文件是一个ASCII文本文件,记录Oracle数据库运行时的一些重要参数。名字通 常为initsid*.ora格式,如:initCIMS.ora,SID相当于它所控制的数据库的标识符。每个Oracle 数据库和实例都有它自己惟一的init.ora文件。 逻辑结构:表空间,段,区,数据库块,模式对象 Oracle中除了用户创建的存放数据对象的数据表空间外,还有以下类型的表空间: (1)System表空间 (2)回滚表空间(RollBack TableSpace) (3)临时表空间(Temp TableSpace) 段:数据段,索引段,临时段,回退段 区是由很多连续的数据块组成的数据库存储空间。缺省情况下,数据库会使用表空间中存储的存储参数来管理他们的区。

Oracle数据库的模式对象包括表、视图、序列、同义词、索引、触发器、存储过程等。内存结构:系统全局区,程序全局区,排序区,软件代码区 系统全局区(SGA,System Global Area.)是内存结构的主要组成部分,是Oracle为一个实例分配的一组共享内存缓冲区,保存着Oracle系统与所有数据库用户的共享信息,包括数据维护、SQL语句分析,重做日志管理等。是实例的主要部分。 数据块缓冲区中存放着Oracle系统最近从数据文件中读取的数据块。数据块缓冲区又称用户数据高速缓冲区,为所有与该实例相链接的用户进程所共享。 在Oracle9i中,数据库缓存的大小可以直接由初始化参数DB_ACHESIZE指定,该参数可以直接以K字节或M字节为单位来设置数据库缓存的大小。 字典缓冲区用于保存数据字典中的行。数据字典缓冲区也通过最近最少使用(LRU)算法来管理。大小由数据库内部管理。字典缓存区是SQL共享池的一部分,共享池的大小(以字节为单位)由数据库文件init.ora中的SHARED_POOL_SIZE参数来设置 对数据库进行修改的任何事务(Transaction)在记录到重做日志之前都必须首先放到重做日志缓冲区(Redo Log Buffer.)中。重做日志缓冲区是专为此开辟的一块内存区域,重做日志缓存中的内容将被LGWR后台进程随时写入重做日志文件 共享SQL池(Shared SQL Pool)相当于程序高速缓冲区,所有的用户程序都存放在共享SQL 池中。SQL共享池包括库高速缓存、数据字典高速缓存和服务器控制结构 Java池为Java命令提供语法分析。 缓冲池把大数据集与其他的应用程序分开,以减少它们争夺数据块缓冲区内相同的资源。可以在SGA中创建多个缓冲池 数据库是指物理上的数据库文件或逻辑上的数据库结构。 基于之上管理和控制物理数据库的软件系统,称为数据库管理系统(DBMS)。 数据库实例和进程 数据库实例是指软件系统中用来访问数据库文件集的存储结构以及后台进程的集合,它是存取和控制数据库的软件机制

oracle体系结构总结

oracle体系结构总结 传统上Oracle体系结构由内存结构、进程结构、存储结构组成。其中,内存结构由SGA、PGA组成;进程结构由用户进程和Oracle进程组成;存储结构由逻辑存储、物理存储组成。 通过数据库的启动过程和一条sql的执行过程可以将oracle的内存结构、进程结构、存储结构串起来。 一、内存结构 (1)SGA(System Global Area):一个包含实例数据和控制信息的共享内存区域 (2)PGA(Program Global Area):一个包含服务器进程和后台进程的数据和控制信息的共享内存区域 1.1系统全局区SGA 系统全局区,是DB Server 中实例的必要组成部分,由很多小内存区共同构成,各个小内存区存放不同的信息,系统全局区用于暂存可以被所有进程(包括server process 以及background process)共享的信息,对系统的运行性能有好处,SGA 在实例启动的时候自动分配,实例关闭时自动释放。 SGA 暂存系统的大量共享数据,对系统有相当的性能影响,所以需要为SGA 选择适当的管理方式,根据所使用的数据库版本不同,SGA 的管理有三种方式:1)8i:SGA 的大小由所有内存组件大小之和决定,不能直接定义SGA 大小,对内存组件的大小可后台进行修改,但只能通过直接修改参数文件的内存参数大小,而且修改完数据库必须重起后才能生效,所以这种内存管理方法叫做SGA 的静态管理。 2)9i:SGA 的大小由初始化参数SGA_MAX_SIZ E 确定,各个内存组件大小之和不能超过这个参数。可以直接通过命令进行修改内存组件大小而不用重启,这种叫做SGA 的动态管理

Oracle体系结构简要介绍

Oracle体系结构简要介绍 1.o racle数据库软件介绍 oracle数据库包括:oracle数据库和oracle实例两个东西。Oracle实例指的是:oracle 启动后占用的内存和后台进程的总称;oracle数据库是实例和数据文件的总称。数据库关闭后数据库实例就不存在了,数据库文件一直存在。 Oracle是由oracle软件和oracle数据库组成,oracle数据库主要指的是三类文件,分别是控制文件(*.ctl)、日志文件(*.log)、数据文件(*.dbf)。 2.o racle中内存结构介绍 oracle数据库启动起来后有两大内存结构,一是SGA(系统全局区),二是PGA,其中SGA 是用来共享的,PGA是用来给进程使用的。

2.1SGA介绍 Sga是就是oracle系统的全局区,在linux和nuix中用ipcs -m命令来查看占用的共享内存。Sga包括:共享池(shared pool)、stream池(stream pool)、大型池(large pool)、java 池、数据库缓冲区高速缓存(buffer cache)、重做日志缓冲区(log buffer)。 其中主要的缓冲区包括:共享池(shared_pool)、数据库高速缓存区(db_cache)、重做日志缓冲区(log_buffer),最容易出问题的也是这三个。 在plsql中可以通过show parameters sga 或者show sga 来查看sga的参数配置。 2.1.1共享池(shard pool) 共享池(shard pool)主要用来缓存SQL语句以及所对应的SQL执行计划。参数是shared_pool_size。 SQL语句的执行计划存放在shard pool中,下次去执行的时候先到shard pool中去找,这样大大减少资源的消耗。 SQL语句的解析以及执行计划的缓存、shard pool的访问,都是有server process 来做的。 2.1.2数据库缓冲区高速缓存(buffer cache) 数据库缓冲区高速缓存(buffer cache)主要用来缓存DBF的数据,这些数据通过SQL语句的执行计划得来的。参数是db_cache_size 。 数据库缓存区高速缓存对应的是数据库写进程(DBWN),数据库写进程(DBWN)对应的是数据文件和控制文件。 2.1.3重做日志缓冲区(log buffer) 重做日志缓冲区(log buffer)主要用来存放日志的。参数是log_buffer。 重做日志缓冲区对应的是日志写进程(LGWR),日志写进程(LGWR)对应的数据文件是重做日志文件,也就是日志文件。 2.1.4stream 池(stream pool) stream 池(stream pool)是由oracle的stream来使用的。参数是streams_pool_size。 2.1.5大型池(large pool) 大型池(large pool)用于为某些大型的进程提供大量的内存分配,如数据备份等。 参数是:lorge_pool_size

Oracle体系结构概述

Oracle 体系结构概述 完整的Oracle 数据库系统通常由两个部分组成:实例(INSTANCE )和数据库(DATABASE )。数据库是由一系列物理文件的集合(数据文件,控制文件,联机日志,参数文件等);实例则是由一组Oracle 后台进程/线程以及在服务器分配的共享内存区。 实例和数据库有时可以互换使用,不过二者的概念完全不同。实例和数据库之间的关系是:数据库可以由多个实例装载和打开,而实例可以在任何时间点装载和打开一个数据库。准确地讲,一个实例在其生存期中最多只能装载和打开一个数据库。如果要想再打开其他数据库,必须先丢弃这个实例,并创建一个新的实例。 数据库的主要功能是保存数据,实际上可以将数据库看作是存储数据的容器。数据库的存储结构也就是数据库存储数据的方式,Oracle 数据库的存储结构分为逻辑存储结构和物理存储结构,这两部分是相互独立但又密切相关的。逻辑存储结构主要用于描述在Oracle 内部的组织和管理数据的方式,而物理存储结构则用于描述在Oracle 外部,即操作系统中组织和管理数据的方式。 Oracle 对逻辑存储结构和物理存储结构的管理是分别进行的,两者之间不直接影响。因此Oracle 的逻辑存储结构能够适用于不同的操作系统平台和硬件平台,而不需要考虑物理实现方式。 在启动Oracle 数据库服务器时,实际上是在服务器的内存中创建一个Oracle 实例(即在服务器内存中分配共享内存并创建相关的后台进程),然后由这个实例来访问和控制磁盘中的数据文件。图2-1以最简单的形式展示了Oracle 实例和数据库。Oracle 有一个很大的内存块,称为系统全局区(SGA )。 文件 文件文件文件 文件数据库 SGA 后台进程后台进程后台进程后台进程后台进程后台进程后台进程 实例 图2-1 Oracle 实例和数据库 当用户连接数据库时,实际上是连接到实例中,由实例负责与数据库通信息,然后再将处理结构返回给用户。 Oracle 数据库服务器的后台进程的数量与其工作模式有密切关系。Oracle 服务器处理请求有两种最常见的方式,分别是专用服务器连接和共享服务器连接。在专用服务器连接下,Oracle 数据库会为每个用户请求分配一个专用服务器进程为其提供服务,当用户请求结束后,对应的服务器进程也相应地被终止。如果同时存在大量的用户请求,则需要同等数量的服务器进程提供服务。 而在共享服务器连接下,Oracle 数据库始终保持一定数量的服务器进程,用户的请求首

Oracle体系结构简介

Oracle体系结构简介 一、数据库(Database) 数据库是一个数据的集合,不仅是指物理上的数据,也指物理、存储及进程对象的一个组合。Oracle是关系型数据库治理系统(RDBMS)。 二、实例(Instance) 数据库实例(也称为服务器Server)就是用来访问一个数据库文件集的一个存储结构及后台进程的集合。它使一个单独的数据库可以被多个实例访问(也就是ORACLE并行服务器-- OPS)。实例和数据库的关系如下 决定实例的组成及大小的参数存储在init.ora文件中。 三、内部结构 表、列、数据类型(T able、Column、Datatype)Oracle中是以表的形式存储数据的,它包含若干个列;列是表的属性的描述;列由数据类型和长度组成;Oracle中定义的数据类型主要有CHAR、VARCHAR2、NUMBER、DATE、LONG、LOB、BFILE等,具体的数据类型情况将在本栏目的相关文档中具体介绍。 约束条件(Constraint)表中以及表间可以存在一些数据上的逻辑关系、限制,也就是约束。Oracle中的约束主要有主键(PK)、外键(FK)、检查(CHECK)、唯一性(UNIQUE)等几种;拥有约束的表中每条数据均必须符合约束条件。 抽象数据类型(Abstract Datatype)可以利用CREATE TYPE命令创建自定义的抽象数据类型。 分区(Partition)可以利用分区将大表分隔成若干个小的存储单元,逻辑上仍然是一个完整的独立单一实体,以减小访问时数据的查找量,提高访问、存储效率 用户(User)用户不是一个物理结构,但是它与数据库的对象拥有非常重要的关系--用户拥有数据库对象,以及对象的使用权。 模式(Schema)用户帐号拥有的对象集合称为模式。 索引(Index)数据库中每行记录的物理位置并不重要,Oracle为每条记录用一个ROWID来标识,ROWID记录了记录的准确位置。索引是供用户快速查找到记录的数据库结构。ORACLE8中有簇索引、表索引、位图索引三种索引形式。 簇(Cluster)经常被频繁引用的表可以在物理位置上被存储在一起,簇就是用来治理这种集中存储的。集中存储可以减少I/O次数,以达到性能的改善和提高。

Oracle体系结构图以及分析

Oracle体系结构 Oracle服务器 –提供一个开放的、全面的、完整的信息管理平台 –Oracle实例和Oracle数据库组成 Oracle实例 ?访问Oracle数据库的一种方法 ?只能是打开一个仅仅只有一个数据库 ?由内存和后台进程组成 Oracle 实例由SGA 内存结构和用于管理数据库的后台进程组成。实例是通过使用对每个操作系统特定的方法来进行标识的。实例一次只能打开和使用一个数据库。

系统全局区 SGA 是用于存储数据库信息的内存区,该信息为数据库进程所共享。它包含Oracle 服务器的数据和控制信息。它是在Oracle 服务器所驻留的计算机的虚拟内存中得以分配。SGA 由几种内存结构组成: ? 共享池用于存储最近执行的SQL 语句和最近使用的数据字典数据。这些SQL 语句可以是用户进程提交的,也可以是从数据字典读取的(在存储过程的情况中)。 ? 数据库缓冲区高速缓存用于存储最近使用的数据。这些数据从数据文件读取,或者写入数据文件。 ? 重做日志缓冲区用于跟踪服务器和后台进程对数据库所做的更改。 在SGA 中还有两种可选的内存结构: ? Java 池:用于存储Java 代码 ? 大型共享池:用于存储并不与SQL 语句处理直接相关的大型内存结构。例如在备份和复原操作过程中复制的数据块。 后台进程 实例中的后台进程执行用于处理并行用户请求所需的通用功能,而不会损害系统的完整性和性能。它们把为每个用户运行的多个Oracle 程序所处理的功能统一起来。后台进程执行I/O 并监控其它Oracle 进程以增加并行性,从而使性能和可靠性更加优越。 根据配置情况,Oracle 实例可以包括多个后台进程,但是每个实例都包括下面五个必需的后台进程: ? 数据库写入程序(DBW0) 负责将更改的数据从数据库缓冲区高速缓存写入数据文件。? 日志写入程序(LGWR) 将重做日志缓冲区中注册的更改写入重做日志文件。 ? 系统监控程序(SMON) 检查数据库的一致性,如有必要还会在数据库打开时启动数据库的恢复。 ? 过程监视器(PMON) 负责在一个Oracle 进程失败时清理资源 ? 检查点进程(CKPT) 负责在每当缓冲区高速缓存中的更改永久地记录在数据库中时,更新控制文件和数据文件中的数据库状态信息。 连接到Oracle Server 1.建立一个用户连接 2.创建一个会话 用于连接例程的进程 用户在给Oracle 提交SQL 语句之前,必须同实例连接起来。 ? 用户启动SQL*Plus 之类的工具,或者运行使用Oracle Forms 之类的工具开发的应用程序。这个应用程序或者工具就在用户进程中执行。 ? 在最基本的配置中,当用户登录到Oracle 服务器时,运行Oracle 服务器的计算机上就会创建一个进程。这个进程称为服务器进程。服务器进程代表在客户机上运行的用户进程与Oracle 实例通信。服务器进程代表用户执行SQL 语句。 连接 连接是用户进程和Oracle 服务器之间的通信路径。数据库用户可以用下面三种方式之一连接到Oracle 服务器: ? 用户登录到运行Oracle 实例的操作系统上,然后启动访问该系统中的数据库的应用程序或工具。通信路径是使用主机操作系统上的交互进程通信机制建立的。 ? 用户在本地计算机上启动应用程序或工具,然后通过网络连接到运行Oracle实例的计算

Oracle体系结构

Oracle体系结构 一、物理结构 二、逻辑结构 三、内存结构 四、数据库实例与进程 五、数据字典 一、Oracle 的物理结构 Oracle 数据库文件包括数据文件、日志文件、控制文件、配置文件 数据文件 (1)用来存储数据库中的全部数据,如数据库表中的数据和索引数据。通常为 后缀名为.dbf格式的文件。

(2) 每个Oracle 可以有一个或多个数据文件,一个数据文件只能属于一个数据库。 (3) 每个数据文件又由若干物理块组成; (4) 一个或多个数据文件组成表空间; 日志文件(重做日志文件) (1)用于记录数据库所做的全部变更(如增加、删除、修改),以便在系统发生故障时,用它对数据库进行恢复。名字通常为Log*.dbf格式。 控制文件 (1)用于打开和存取数据库。 (2)是较小的二进制文件,记录了数据库的物理结构,如:数据库名、数据库的数据文件和日志文件的名字和位置等信息。 (3)名字通常为Ctr*.ctl格式,如CtrlCIMS.ctl。 (4)控制文件中的内容只能够由Oracle本身来修改。 (5)每个数据库必须至少拥有一个控制文件。一个数据库也可有多个控制文件,但是一个控制文件只能属于一个数据库。 配置文件: (1)是一个ASCII文本文件,记录Oracle 数据库运行时的一些重要参数。 (2)名字通常为initsid*.ora格式,如:initCIMS.ora, (3)SID相当于它所控制的数据库的标识符。 (4)每个Oracle数据库和实例都有它自己惟一的init.ora 文件。

二、Oracle 的逻辑结构 逻辑结构描述了数据库从逻辑上如何来存储数据块中的数据。包括表空间、段、区、数据块和模式对象。逻辑结构支配一个数据库如何使用系统的物理空间,模式对象及其之间的关系则描述关系数据库之间的设计。一个数据块从逻辑上是由一个或多个表空间组成,表空间是数据块中物理编组的数据仓库,每个表空间由段构成,段由一组区组成,一个区由连续的数据块组成。 表空间 表空间分类: Oracle 中除了用户创建的存放数据对象的数据表空间外,还有以下类型的表空间: 1) System 表空间(System TableSpace) 2) 回滚表空间(RollBack TableSpace) 3) 临时表空间(Temp TableSpace) 系统表空间(System TableSpace): a)是每个Oracle数据库必须具备部分,安装时自动建立, b)存放表空间名称、表空间所含数据文件等管理数据库自身所需信息; c)如:数据字典、存储过程、包、函数和触发器定义、系统回滚段、数据 库对象定义,用户过程等。 d)每个Oracle 数据库必须至少有个默认表空间。

Oracle数据库体系结构(详细版)

Oracle体系结构 Oracle核心竞争力 可扩充性: Oracle系统有能力承担增长的工作符合,并且相应的扩充系统资源利用情况。 可靠性: 无论出现系统资源崩溃,电源断电还是系统故障的时候,我们都可以对Oracle进行配置。以保证检索用户数据事务处理的时候,不受到影响。 可管理性: 数据库管理员可以微调Oracle使用内存的方式,以及Oracle向磁盘写入数据的频率。并且管理可以调整,数据库为连接到数据库的用户分配操作系统进程的方式。 Oracle总体结构分为三个部分 第一部分:系统全局区(SGA) 第二部分:程序全局区和后台进程

第三部分:Oracle的文件 如果从功能上划分的话: 存储结构:由这些文件就构成了Oracle的物理存储结构。 内存结构:使用内存最多的是SGA,也是影响数据库系统性能最大的一个参数。 进程结构:前台进程服务进程和用户进程,是根据实际需要而运行的,并在需要结束后立刻结束。后台进程是指Oracle数据库启动后自动启动的几个操作系统进程。 存储结构 包括物理结构和逻辑结构,既独立又相互联系的。 物理结构:是和操作系统平台有关的。 逻辑结构:逻辑存储结构是和操作系统平台无关的。 _______________________________________________________________________________

这个图是两种存储结构中的对应关系 表空间包括系统表空间和用户表空间。表空间也是最大的逻辑单位。 块是最小的一个逻辑单位。 逻辑结构的表空间对应着物理结构的数据文件,也就是创建表空间的时候要给它指定数据文件,但是一个表空间可以对应多个数据文件。表空间的大小也就是他包含的数据文件大小的总和。 数据文件呢同时又对应着操作系统中的数据块,数据文件也是以数据块的形式,存在于操作 系统中。 逻辑结构中的块也对应着操作系统的数据块。 ——————————————————————————————————————— 物理存储结构 Oracle的物理存储结构,也就是Oracle的数据库文件 数据库文件又分为主要文件和其他文件 主要文件: 首先来看数据文件: 就是物理存储Oracle数据库数据的文件有一下特点:

(Oracle管理)ORACLE 体系结构

概要 在本章里你可以了解以下内容 1、ORACLE 实例——包括内存结构与后台进程 2、ORACLE 数据库——物理操作系统文件的集合 3、了解内存结构的组成 4、了解后台进程的作用 5、了解数据库的物理文件 6、解释各种逻辑结构 一、ORACLE事例 1、ORACLE 实例 System Global Area(SGA) 和Background Process 被成为数据库的实例。 2、ORACLE 数据库 一系列物理文件的集合(数据文件,控制文件,联机日志,参数文件等) 3、系统全局共享区System Global Area(SGA) System Global Area 是一块巨大的共享内存区域,他被看做是Oracle 数据库的一个大缓冲池,这里的数据可以被ORACLE的各个进程共用。其大小可以通过如下语句查看: SQL> select * from v$sga; NAME VALUE -------------------- --------- Fixed Size 39816 Variable Size 259812784 Database Buffers 1.049E+09 Redo Buffers 327680 更详细的信息可以参考V$sgastat、V$buffer_pool 主要包括以下几个部分: a、共享池(Shared pool) 共享池是SGA中最关键的内存片段,特别是在性能和可伸缩性上。一个太小的共享池会扼杀性能,使系统停止,太大的共享池也会有同样的效果,将会消耗大量的CPU来管理这个共享池。不正确的使用共享池只会带来灾难。共享池主要又可以分为以下两个部分: ·SQL语句缓冲(Library Cache) 当一个用户提交一个SQL语句,Oracle会将这句SQL进行分析(parse),这个过程类似于编译,会耗费相对较多的时间。在分析完这个SQL,Oracle会把他的分析结果给保存在Shared pool的Library Cache中,当数据库第二次执行该SQL时,Oracle自动跳过这个分析过程,从而减少了系统运行的时间。这也是为什么第一次运行的SQL 比第二次运行的SQL要慢一点的原因。 下面举例说明parse的时间 SQL> select count(*) from scpass ; COUNT(*) ---------- 243 Elapsed: 00:00:00.08 这是在Share_pool 和Data buffer 都没有数据缓冲区的情况下所用的时间 SQL> alter system flush SHARED_POOL; System altered. 清空Share_pool,保留Data buffer

oracle体系结构总结.

传统上Oracle体系结构由内存结构、进程结构、存储结构组成。其中,内存结构由SGA、PGA组成;进程结构由用户进程和Oracle进程组成;存储结构由逻辑存储、物理存储组成。通过数据库的启动过程和一条sql的执行过程可以将oracle的内存结构、进程结构、存储结构串起来。 一、内存结构 (1)SGA(System Global Area):一个包含实例数据和控制信息的共享内存区域 (2)PGA(Program Global Area):一个包含服务器进程和后台进程的数据和控制信息的共享内存区域 1.1系统全局区SGA 系统全局区,是 DB Server 中实例的必要组成部分,由很多小内存区共同构成,各个小内存区存放不同的信息,系统全局区用于暂存可以被所有进程(包括server process 以及background process)共享的信息,对系统的运行性能 有好处,SGA 在实例启动的时候自动分配,实例关闭时自动释放。 SGA 暂存系统的大量共享数据,对系统有相当的性能影响,所以需要为SGA 选 择适当的管理方式,根据所使用的数据库版本不同,SGA 的管理有三种方式:1)8i:SGA 的大小由所有内存组件大小之和决定,不能直接定义 SGA 大小,对内存组件的大小可后台进行修改,但只能通过直接修改参数文件的内存参数大小,而且修改完数据库必须重起后才能生效,所以这种内存管理方法叫做 SGA 的静态管理。 2)9i:SGA 的大小由初始化参数 SGA_MAX_SIZ E 确定,各个内存组件大小之和不能超过这个参数。可以直接通过命令进行修改内存组件大小而不用重启,这种叫做 SGA 的动态管理 3)10g:SGA 大小既可以像 9i 一人样动态管理,也可以实施 SGA 的自动管理,默认是 SGA 的自动管理,启用 SGA 自动管理只需要设置初始化参数 SGA_TARGET 即可,各个组件大小之和不超过 SGA _TARGET 。在自动管理下,SGA 各个内存组件由数据库自动设置大小,设置各个内存区大小的依据来源于系统自动收集的统计信息。 在设置内存组件大小的时候,分配的基本单位是粒度(granule ) granule 是一段连续的虚拟内存,大小取决于 SGA_MAX_SIZE 的大小,如果 SGA_MAX_SIZ E小于 128M ,Granule 为 4M,否则 Granule 为 16M。 大多数内存组件的大小必须是 Granule 的整数倍,Redo Log Buffer 的大小不受这个限制,可以自行设置,它与其他小内存区共同构成 Granule 的整数倍。整个 SGA 最小不小于 3 个 Granule 大小,其中共享池一个,数据缓存区一个,其他分一个, SGA的总大小也一定是 Granule 的整数倍大小。 SGA 大多数组件的大小可以动态调整,只要确保所有的内存组件大小之和不超过SGA _MAX_SIZE 或 SGA_TARGET 的大小,在 10G 中 SGA 内存组件可以自动管理,各个内存大小由数据库自己决定,设置 SGA_TARGET 参数(非 0)即可以开启内存自动管理,这个参数也可动态修改,如果设置为 0,则意味着,禁用内存自动管理,伋需要 DBA 手动调整各个内存组件大小。 以下内存组件大小可以由数据库自动设置 1)Buffer cache(db_cache_size)

相关主题
文本预览
相关文档 最新文档