当前位置:文档之家› Oracle的内存结构与进程结构

Oracle的内存结构与进程结构

Oracle的内存结构与进程结构
Oracle的内存结构与进程结构

1:实例(Instance)

在一个服务器中,每一个运行的数据库都与一个数据库实例相联系,实例是我们

访问数据库的手段。

实例在操作系统中用ORACLE_SID来标识,在中用参数INSTANCE_NAME来标识,

它们两个的值是相同的。数据库启动时,系统首先在服务器内存中分配系统全局区(SGA),构成了Oracle的内存结构,然后启动若干个常驻内存的操作系统进程,即组成了的

进程结构,内存区域和后台进程合称为一个实例。

数据库与实例之间是1对1/n的关系,在非并行的数据库系统中每个数据库与一个

实例相对应;在并行的数据库系统中,一个数据库会对应多个实例,同一时间用户只与一个

实例相联系,当某一个实例出现故障时,其他实例自动服务,保证数据库正常运行。在任何情况下,每个实例都只可以对应一个数据库。

2:10g动态内存管理

内存是影响数据库性能的重要因素,Oracle8i使用静态内存管理,10g使用动态

内存管理。所谓静态内存管理,就是在数据库系统中,无论是否有用户连接,也无论并发用量大小,只要数据库服务在运行,就会分配固定大小的内存;动态内存管理允许在数据库服务运行时对内存的大小进行修改,读取大数据块时使用大内存,小数据块时使用小内存,读取标准内存块时使用标准内存设置。

按照系统对内存使用方法的不同,数据库的内存可以分为以下几个部分:

?系统全局区:SGA(System Global Area)

?程序全局区:PGA(Programe Global Area)

?排序池:(Sort Area)

?大池:(Large Pool)

?Java池:(Pool)

2-1:系统全局区SGA(System Global Area)

SGA是一组为系统分配的共享的内存结构,可以包含一个数据库实例的数据或控制信

息。如果多个用户连接到同一个数据库实例,在实例的SGA中,数据可以被多个用户共享。当数据库实例启动时,SGA的内存被自动分配;当数据库实例关闭时,SGA内存被回收。 SGA是占用内存最大的一个区域,同时也是影响数据库性能的重要因素。

SGA的有关信息可以通过下面的语句查询,sga_max_size的大小是不可以动态调整的。

=====================================

> show parameter sga

NAME TYPE VALUE

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

loc

您正在看的Oracle是:Oracle的内存结构和进程结构。

k_sga boolean FALSE

pre_page_sga boolean FALSE

sga_max_size big integer 164M

sga_target big integer 0

> alter system set sga_max_size=100m;

alter system set sga_max_size=100m

*

ERROR at line 1:

ORA-02095: specified initialization parameter cannot be modifd

======================================

系统全局区按作用不同可以分为:

?数据缓冲区

?日志缓冲区

?共享池

2-1-1:数据缓冲区(Database Buffer Cache)

如果每次执行一个操作时,都必须从磁盘读取所有数据块并在改变它之后

又必须把每一块写入磁盘,显然效率会非常低。数据缓冲区存放需要经常访问的数据,供所有用户使用。修改数据时,首先从数据文件中取出数据,存储在数据缓冲区中,

修改/插入数据也存储在缓冲区中,commit或DBWR(下面有详细介绍)进程的其他条件引发时,数据被写入数据文件。

数据缓冲区的大小是可以动态调整的,但是不能超过sga_max_size的限制。

======================================

> show parameter db_cache_size

NAME TYPE VALUE

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

db_cache_size big integer 24M

> alter system set db_cache_size=128m;

alter system set db_cache_size=128m

*

ERROR at line 1:

ORA-02097: parameter cannot be modified because specifd value is invalid

ORA-00384: Insuffic

您正在看的Oracle是:Oracle的内存结构和进程结构。

ient memory to grow cache

> alter system set db_cache_size=20m;

System altered.

> show parameter db_cache_size;

NAME TYPE VALUE

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

db_cache_size big integer 20M

#此处我仅增加了1M都不行?

> alter system set db_cache_size=25m;

alter system set db_cache_size=25m

*

ERROR at line 1:

ORA-02097: parameter cannot be modified because specifd value is invalid

ORA-00384: Insufficnt memory to grow cache

#修改显示格式,方便查看。

> column name format a40 wrap

> column value format a20 wrap

#下面语句可以用来查看内存空间分配情况,注意SGA各区大小总和。

> select name,value from v$parameter where name like '%size' and value <> '0';

#先将_pool_size调小,然后再修改db_cache_size

> show parameter _pool_size;

NAME TYPE VALUE

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

_pool_size big integer 48M

SQL> alter system set _pool_size=20m;

System altered.

> alter system set _pool_size=30m;

System altered.

#上面说明SGA中各区大小总和不能超过sga_max_size。

=====================================

数据缓冲区的大小对数据库的存区速度有直接影响,多用户时尤为明显。有些应用对速度要求很高,一般要求数据缓冲区的命中率在90%以上。

下面给出一种计算数据缓冲区命中率的方法:

?使用数据字典v$sysstat

=====================================

> select name, value from v$sysstat

2 where name in('session logical reads',

3 'physical reads',

4 'physical reads direct',

5 'physical reads direct (lob)')

NAME VALUE

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

session logical reads 895243

physical reads 14992

physical reads direct 34

physical reads direct (lob) 0

======================================

命中率=1-(14992-34-0)/895243

可以让给出数据缓冲区大小的建议:

======================================

> alter system set db_cache_advice=on;#打开该功能

System altered.

> alter system set db_cache_advice=off;#关闭该功能

System altered.

======================================

2-1-2:日志缓冲区(Log Buffer Cache)

日志缓冲区用来存储数据库的修改信息。该区对数据库性能的影响很小,有关日

志后面还会有详细的介绍。

查询日志缓冲区大小:

SQL> show parameter log_buffer

NAME TYPE VALUE

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

log_buffer integer 262144

2-1-3:共享池(Share Pool)

共享池是对SQL,PL/程序进行语法分析,编译,执行的内存区域。

它包含三个部分:(都不可单独定义大小,必须通过share pool间接定义)。?库缓冲区(Library Cache)包含SQL,PL/语句的分析码,执行计划。

?数据字典缓冲区(Data Dictionary Cache)表,列定义,权限。

?用户全局区(Usr Global Area)用户MTS会话信息。

共享池的大小可以动态修改:

======================================

> show parameter shared_pool_size

NAME TYPE VALUE

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

__shared_pool_size big integer 80M

shared_pool_size big integer 80M

> alter system set shared_pool_size=78m

System altered.

======================================

#上面的__shared_pool_size一行奇怪?

2-2:程序全局区PGA(Programe Global Area)

程序全局区是包含单个用户或服务器数据和控制信息的内存区域,它是在用户进程连接到Oracle并创建一个会话时由自动分配的,不可共享,主要用于用户在编程存

储变量和数组。

如上图:

?Stack Space是用来存储用户会话变量和数组的存储区域;

?User Session Data是为用户会话使用的附加存储区。

|--Session Information

|--Sort Area

|--Cursor Information

注意Session information(用户会话信息)在独占服务器中与在共享服务器中所处

的内存区域是不同的。

2-3:排序区,大池,池

排序区(Sort Area)为有排序要求的语句提供内存空间。系

统使用专用的内存区

域进行数据排序,这部分空间就是排序区。在数据库中,用户数据的排序可使用

两个区域,一个是内存排序区,一个是磁盘临时段,系统优先使用内存排序区进行排序。如果内存不够,Orcle自动使用磁盘临时表空间进行排序。为提高数据排序的速度,建议尽量使用内存排序区,而不要使用临时段。

参数sort_area_size用来设置排序区大小。(好象不能动态修改?)

大池(Large Pool)用于数据库备份工具--恢复管理器(RMAN:Recovery Manager)。 Large Pool的大小由large_pool_size确定,可用下面语句查询和修改:

=========================================

> show parameter large_pool_size

NAME TYPE VALUE

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

large_pool_size big integer 8M

> alter system set large_pool_size=7m;

System altered.

=========================================

Java池主要用于Java语言开发,一般来说不低于20M。其大小由_pool_size来

确定,可以动态调整。

2-4:自动共享内存管理(Automatic Shared Memory(SGA) Management)

在8i/9i中数据库管理员必须手动调整SGA各区的各个参数取值,每个区要根据

负荷轻重分别设置,如果设置不当,比如当某个区负荷增大时,没有调整该区内存大小,则可能出现ORA-4031:unable to allocate ...bytes of shared memory错误。

在10g中,将参数STATISTICS_LEVEL设置为TYPICAL/ALL,使用SGA_TARGET指定SGA区总大小,数据库会根据需要在各个组件之间自动分配内存大小。

下面是系统自动调整的区域:

?固定SGA区及其他?共享池?数据缓冲区?池?大池。

注意:如果不设置SGA_TARGET,则自动共享内存管理功能被禁止。

==========================================

> show parameter statistics_level

NAME TYPE VALUE

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

statistics_level string TYPICAL

> alter system set statistics_level=all;

System altered.

#typical和all有什么区别?

> alter system set statistics_level=typical;

> System altered.

> show parameter sga_target

NAME TYPE VALUE

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

sga_target big integer 0

> alter system set sga_target=170m;

alter system set sga_target=170m

*

ERROR at line 1:

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

> alter system set sga_target=20m;

System altered.

#不过后来又发现sga_target的值变成了140M? 下面是语句执行情况。

> show parameter sga_target

NAME TYPE VALUE

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

sga_target big integer 140M

> alter system set sga_target=0;

System altered.

> show parameter sga_target

NAME TYPE VALUE

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

sga_target big integer 0

#改为20M

> alter system set sga_target=20m;

System altered.

#显示的是140M

> show parameter sga_target

NAME TYPE VALUE

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

sga_target &nbs

p; big integer 140M

#不可缩减?

> alter system set sga_target=130m;

alter system set sga_target=130m

*

ERROR at line 1:

ORA-02097: parameter cannot be modified because specifd value is invalid ORA-00827: could not shrink sga_target to specifd value

#不可增加

> alter system set sga_target=141m;

alter system set sga_target=141m

*

ERROR at line 1:

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

3:实例的进程结构(Process Structure)

包含三类进程:

?用户进程(User Process)

?服务器进程(Server Process)

?后台进程(Background Process)

3-1:用户进程和服务器进程

当数据库用户请求连接到的服务时启动用户进程(比如启动Plus时)。

?用户进程首先必须建立一个连接。

?用户不能直接与服务器,必须通过服务器进程交互。

?服务器进程是用户进程与服务器交互的桥梁,它可以与Server直接交互。

?服务器进程可以有共享和独占两种形式。

3-2:后台进程(Backgroung Process)

数据库的物理结构与内存结构之间的交互要通过后台进程来完成。数据库的后台进程包含两类,一类是必须的,一类是可选的:

?Mandatory background processes

|--DBWn(Database Writer):数据写入

|--PMON(Process Moniter):进程监控

|--LGWR(Log Writer):日志写入

|--SMON(System Moniter):系统监控

|--RECO(Recovery):恢复

|--CKPT(Chekpoint):检查点

?Optional background processes

|--ARCn(Archiver):归档

|--LCKn(Lock):锁

|--Dnnn(Dispatcher):调度

|--......

可以用下面的语句查看正在运行的后台进程:

=========================================

SQL> select * from v$bgprocess where paddr<>'00';

PADDR PSERIAL# NAME DESCRIPTION

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

6B0ED064 1 PMON process cleanup

6B0ED4E4 1 MMAN Memory Manager

6B0ED964 1 DBW0 db writer process 0

6B0EDDE4 1 LGWR Redo etc.

6B0EE264 1 CKPT checkpoint

6B0EE6E4 1 SMON System Monitor Process

6B0EEB64 1 RECO distributed recovery

6B0EEFE4 1 CJQ0 Job Queue Coordinator

6B0F01E4 1 QMNC AQ Coordinator

6B0F0664 1 MMON Manageability Monitor Process

6B0F0AE4 1 MMNL Manageability Monitor Process 2

========================================

3-2-1:DBWR(Database Writer,数据写入进程)

将数据缓冲区的数据写入数据文件,是负责数据缓冲区管理的一个后台进程。

当数据缓冲区中的一数据被修改后,就标记为dirty,DBWR进程将数据缓冲区中“脏”

数据写入数据文件,保持数据缓冲区的”干净“。由于数据缓冲区的数据被用户修改并占

用,空闲数据缓冲区会不断减少,当用户进程要从磁盘读取数据块到数据缓冲区却无法找

到足够的空闲数据缓冲区时,DBWR将数据缓冲区内容写入磁盘,使用户进程总可以得到足够的空闲数据缓冲区。

DBWR的作用:

?管理数据缓冲区,以便用户进程总能够找到足够的空闲缓冲区。

?将所有修改后的缓冲区数据写入数据文件。

?使用LRU(最近最少使用)算法保持缓冲区数据是最近经常使用的。

?通过延迟写来优化磁盘I/0读写。

3-2-2:LGWR(Log Writer,日志写入进程)

将日志数据从日志缓冲区写入磁盘日志文件组。数据库在运行时,如果对数据库进行修

改则产生日志信息,日志信息首先产生于日志缓冲区。当日志达到一定数量时,由LGWR将将日志数据写入到日志文件组,再经过日志切换,由归档进程(ARCH)将日志数据写入归档进程(前提是数据库运行在归档模式下)。数据库遵循写日志优先原则,即在写数据之前先写日志。

简单介绍

?ARCH(Archiver,归档进程)

数据库有两种运行模式,归档(ARCHIVELOG),非归档(NOARCHIVELOG)模式。

以非归档模式运行时日志在切换时被直接覆盖,不产生归档日志,这是数据库默认的运行模

式。数据库运行在归档模式时,在日志切换之前,由ARCH进程将日志信息写入磁盘,也就是

自动备份在线日志。

Oracle数据库的Redo文件数量是有限的,所以以循环的方式向它们中写入。它顺

序写满每一个Redo文件,当达到最后一个时,再循环回去开始填写第一个Redo文件。如果为

了能恢复数据库而想保存日志文件,那么在它们被重新使用之前需要对其进行备份,归档进

程管理此工作。

?CKPT(Check Point,检查点进程)

运行CKPT时,系统对全部数据文件及控制文件文件头的同步信号进行修改,以保证数据

库的同步。检查点出现在以下情况:

|--在每个日志切换时产生。

|--上一个检验点之后又经过了指定时间。

|--从上一个检验点之后,当预定义数量的日志块被写入磁盘之后。

|--数据库关闭。

|--DBA强制产生。

|--当表空间设置为OFFLINE时。

?SMON(System Moniter,系统监控进程)

SMON在实例启动时执行实例恢复,并负责清理不再使用的临时段。

?PMON(Process Monitor,进程监控)

PMON在用户进程出现故障时进行恢复,负责清理内存区域和释放该进程所使用的资源。

?RECO(Recovery,恢复进程)

RECO用于分布式数据库维持在分布式环境中的数据的一致性。

?LCKn(Lock,锁进程)

在并行服务器中用于多个实例间的封锁。

?Dnnn(Dispatcher,调度进程)

Dnnn存在于多线程服务器体系结构中,负责将用户进程连接到服务器进程,再把结果返回给用户进程。

oracle实例内存解析

一、名词解释 (1)SGA:System Global Area是Oracle Instance的基本组成部分,在实例启动时分配;系统全局域SGA主要由三部分构成:共享池、数据缓冲区、日志缓冲区。 (2)共享池:Shared Pool用于缓存最近被执行的SQL语句和最近被使用的数据定义,主要包括:Library cache(共享SQL区)和Data dictionary cache(数据字典缓冲区)。共享SQL区是存放用户SQL命令的区域,数据字典缓冲区存放数据库运行的动态信息。 (3)缓冲区高速缓存:Database Buffer Cache用于缓存从数据文件中检索出来的数据块,可以大大提高查询和更新数据的性能。 (4)大型池:Large Pool是SGA中一个可选的内存区域,它只用于shared server环境。 (5)Java池:Java Pool为Java命令的语法分析提供服务。 (6)PGA:Process Global Area是为每个连接到Oracle database的用户进程保留的内存。 二、分析与调整 (1)系统全局域: SGA与操作系统、内存大小、cpu、同时登录的用户数有关。可占OS系统物理内存的1/3到1/2。 a.共享池Shared Pool: 查看共享池大小Sql代码 SQL>show parameter shared_pool_size 查看共享SQL区的使用率: Sql代码 select(sum(pins-reloads))/sum(pins)"Library cache"from v$librarycache; --动态性能表 LIBRARY命中率应该在90%以上,否则需要增加共享池的大小。

Oracle存储结构

Oracle 存储结构分析 一逻辑结构的层次与种类 1,表(table): 2,分区表(table partition):一个有很大数据量的表;我们可以把表分区,每个分区可以放在不同的段上。以实现对表的优化 3,簇(cluster):将多个表集合在一起,这些表拥有相同的列;这些相同列放在同一个物理的段里面。 4,索引(index): 5,index-organized table(对应sqlserver的群集索引): 这些表中的数据以索引的大小按升序或者降序排列 6,index partition(索引的分区): 关于索引的数据分别存于不同的物理段里面 7,undo segment: 有序循环的方式存储(存放old value;读一致性;rollback ;recovery) 8,temporary: 临时段用来排序 9,LOB segment: 存放大的数据,oracle里面将这些数据并不放在表内部,而 是有专门一个段来存储 10,nested table(嵌套表):一个表中的某个字段的值是另外一个整表! 11,bootstrap segment:初始化我们的实例用的。这个段不需要维护和管理! 二oracle存储参数的设定及继承问题 【记忆】默认为 Oracle default ===》 Tablespace (创建表空间时定义的参数) ====》 Segment(优先级最高)

【理解】初始参数 oracle block 的5倍;意思是说你创建一个表,即使里面没存数据,它已经占用了8k×5=40kB的空间(这里假设oracle block size 为8kB) 三创建表时可以单独为表指定存储参数 SQL> conn hr/123456@kk 已连接。 SQL> create table hello(id int) 2 tablespace bkeep 3 storage(initial 100k 4 next 100k); 【点子】我们来创建一个表空间test11,不带任何存储参数,然后打开oem看看它的存储参数(这些参数就是从oracle default哪里继承过来的!) 四extent的分配和重新分配 -当创建段时就分配空间 -当扩展段时给它分配空间 -强制分配空间给段(段可以跨数据文件,但不可以跨表空间;但是强制的段是不能跨数据文件获取空间的) 创建表时,最初始的空间一定会分配给它!

Oracle数据库实例及其相关概念

Oracle数据库实例及其相关概念2010-11-24 00:00 出处:中国IT实验室作者:佚名 完整的Oracle数据库通常由两部分组成:Oracle数据库实例和数据库。 用数据库安全策略防止权限升级攻击 C++虚函数的显式声明 完整的Oracle数据库通常由两部分组成:Oracle数据库实例和数据库。 1)数据库是一系列物理文件的集合(数据文件,控制文件,联机日志,参数文件等); 2)Oracle数据库实例则是一组Oracle后台进程/线程以及在服务器分配的共享内存区。 在启动Oracle数据库服务器时,实际上是在服务器的内存中创建一个Oracle实例(即在服务器内存中分配共享内存并创建相关的后台内存),然后由这个Oracle数据库实例来访问和控制磁盘中的数据文件。Oracle有一个很大的内存快,成为全局区(SGA)。 一、数据库、表空间、数据文件 1.数据库 数据库是数据集合。Oracle是一种数据库管理系统,是一种关系型的数据库管理系统。 通常情况了我们称的“数据库”,并不仅指物理的数据集合,他包含物理数据、数据库管理系统。也即物理数据、内存、操作系统进程的组合体。 数据库的数据存储在表中。数据的关系由列来定义,即通常我们讲的字段,每个列都有一个列名。数据以行(我们通常称为记录)的方式存储在表中。表之间可以相互关联。以上就是关系模型数据库的一个最简单的描述。

当然,Oracle也是提供对面象对象型的结构数据库的最强大支持,对象既可以与其它对象建立关系,也可以包含其它对象。关于OO型数据库,以后利用专门的篇幅来讨论。一般情况下我们的讨论都基于关系模型。 2.表空间、文件 无论关系结构还是OO结构,Oracle数据库都将其数据存储在文件中。数据库结构提供对数据文件的逻辑映射,允许不同类型的数据分开存储。这些逻辑划分称作表空间。 表空间(tablespace)是数据库的逻辑划分,每个数据库至少有一个表空间(称作SYSTEM表空间)。为了便于管理和提高运行效率,可以使用一些附加表空间来划分用户和应用程序。例如:USER表空间供一般用户使用,RBS表空间供回滚段使用。一个表空间只能属于一个数据库。 每个表空间由同一磁盘上的一个或多个文件组成,这些文件叫数据文件(datafile)。一个数据文件只能属于一个表空间。在Oracle7.2以后,数据文件创建可以改变大小。创建新的表空间需要创建新的数据文件。数据文件一旦加入到表空间中,就不能从这个表空间中移走,也不能与其它表空间发生联系。 如果数据库存储在多个表空间中,可以将它们各自的数据文件存放在不同磁盘上来对其进行物理分割。在规划和协调数据库I/O请求的方法中,上述的数据分割是一种很重要的方法。 3.Oracle数据库的存储结构分为逻辑存储结构和物理存储结构: 1)逻辑存储结构:用于描述Oracle内部组织和管理数据的方式; 2)物理存储结构:用于描述Oracle外部即操作系统中组织和管理数据的方式。 二、Oracle数据库实例

Oracle内存全面分析

Oracle 内存内存全面全面全面分析分析 作者作者::fuyuncat 来源来源::https://www.doczj.com/doc/d06972555.html, 作者简介 黄玮,男,99年开始从事DBA 工作,有多年的水利、军工、电信及航 运行业大型数据库Oracle 开发、设计和维护经验。 曾供职于南方某著名电信设备制造商——H 公司。期间,作为DB 组 长,负责设计、开发和维护彩铃业务的数据库系统。目前,H 公司的彩铃系 统是世界上终端用户最多的彩铃系统。最终用户数过亿。 目前供职于某世界著名物流公司,负责公司的电子物流系统的数据库开 发、维护工作。 msn: fuyuncat@https://www.doczj.com/doc/d06972555.html, Email :fuyuncat@https://www.doczj.com/doc/d06972555.html, Oracle 的内存配置与oracle 性能息息相关。而且关于内存的错误(如4030、4031错 误)都是十分令人头疼的问题。可以说,关于内存的配置,是最影响Oracle 性能的配 置。内存还直接影响到其他两个重要资源的消耗:CPU 和IO。 首先,看看Oracle 内存存储的主要内容是什么: ? 程序代码(PLSQL、Java); ? 关于已经连接的会话的信息,包括当前所有活动和非活动会话; ? 程序运行时必须的相关信息,例如查询计划; ? Oracle 进程之间共享的信息和相互交流的信息,例如锁; ? 那些被永久存储在外围存储介质上,被cache 在内存中的数据(如redo log 条 目,数据块)。 此外,需要记住的一点是,Oracle 的内存是与实例对应的。也就是说,一个实例就有 一个独立的内存结构。 先从Oracle 内存的组成架构介绍。 1. Oracle 的内存架构组成 Oracle 的内存,从总体上讲,可以分为两大块:共享部分(主要是SGA)和进程独享 部分(主要是PGA 和UGA)。而这两部分内存里面,根据功能不同,还分为不同内存池 (Pool)和内存区(Area)。下面就是Oracle 内存构成框架图:

实验2 Oracle数据库物理存储结构管理

实验2 Oracle数据库物理存储结构管理 1.向BOOKSALES数据库的USERS表空间添加一个大小为10MB的数据文件users0 2.dbf。 2.向BOOKSALES数据库的TEMP表空间添加一个大小为10MB的临时数据文件temp02.dbf。 3. 向BOOKSALES数据库的USERS表空间中添加一个可以自动扩展的数据文件user03.dbf ,大小5M,每次扩展1M,最大容量为100M。 4.取消BOOKSALES数据库数据文件user03.dbf的自动扩展。 5.将BOOKSALES数据库数据文件users02.dbf更名为users002.dbf。

6.查询BOOKSALES数据库当前所有的数据文件的详细信息。 7.为BOOKSALES数据库添加一个多路复用的控制文件control03.ctl。 (过程忘了截图)复制过程没有问题,在文件夹中也能显示出CONTROL03.CTL文件可是在重新startup的时候数据库没有重新运行,出现了错误 查询也有CONTROL03.CTL文件

后来删除了CONTROL03.CTL文件(即10的图)还是启动不了数据库,只在新的例程里,后来重载了oracle。 8.以二进制文件的形式备份BOOKSALES数据库的控制文件。 第一次忘了截图 9.将BOOKSALES数据库的控制文件以文本方式备份到跟踪文件中,并查看备份的内容。

10.删除BOOKSALES数据库的控制文件control03.ctl。 11.查询BOOKSALES数据库当前所有控制文件信息 12.向BOOKSALES数据库添加一个重做日志文件组(组号为4),包含一个成员文件undo04a.log,大小为4M。 13.向BOOKSALES数据库的重做日志组4中添加一个成员文件,名称为undo04b.log。 14.将BOOKSALES数据库的重做日志组4中所有成员文件移植到一个新的目录下。

oracle体系结构

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

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

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

oracle实例内存详解

一、名词解释 (1)SGA:SystemGlobal Area是Oracle Instance的基本组成部分,在实例启动时分配;系统全局域SGA主要由三部分构成:共享池、数据缓冲区、日志缓冲区。 (2)共享池:Shared Pool用于缓存最近被执行的SQL语句和最近被使用的数据定义,主要包括:Librarycache(共享SQL区)和Datadictionarycache(数据字典缓冲区)。共享SQL区是存放用户SQL命令的区域,数据字典缓冲区存放数据库运行的动态信息。 (3)缓冲区高速缓存:DatabaseBufferCache用于缓存从数据文件中检索出来的数据块,可以大大提高查询和更新数据的性能。 (4)大型池:Large Pool是SGA中一个可选的内存区域,它只用于shared server环境。 (5)Java池:Java Pool为Java命令的语法分析提供服务。 (6)PGA:Process Global Area是为每个连接到Oracle database的用户进程保留的内存。 二、分析与调整 (1)系统全局域: SGA与操作系统、内存大小、cpu、同时登录的用户数有关。可占OS系统物理内存的1/3到1/2。 a.共享池Shared Pool: 查看共享池大小Sql代码 SQL>show parameter shared_pool_size 查看共享SQL区的使用率: Sql代码 select(sum(pins-reloads))/sum(pins)"Library cache"from v$librarycache; --动态性能表 LIBRARY命中率应该在90%以上,否则需要增加共享池的大小。 查看数据字典缓冲区的使用率:

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数据库的物理存储结构之数据库控制文件详解

Oracle数据库中,数据库控制文件维护着数据库的全局物理结构,用以支持数据库成功的启动和运行。创建数据库时,同时就提供了与之对应的数据库控制文件。在数据库使用过程中,Oracle不断的更新数据库控制文件,所以只要数据库是打开的,数据库控制文件就必须处于可写状态。如果,犹豫某些原因控制文件不能被访问,那么数据库也就不能正常的工作了。 每一个控制文件只能与一个Oracle数据库相关联。数据库控制文件包含了数据库实例的启动和正常操作时,访问数据库所需的关于数据库的信息。数据库控制文件的内容只有Oralce 可以修改,数据库管理员和用户都不能对其进行编辑。 控制文件包含了以下信息: ?数据库名称 ?数据库创建的时间戳 ?相关的数据文件、重演日志文件的名称和位置 ?表空间信息 ?数据文件脱机范围 ?日志历史 ?归档日志信息 ?备份组和备份块信息 ?备份数据文件和重演日志信息 ?数据文件拷贝信息 ?当前日志序列数 ?检查点(checkpoint)信息 数据库名称和时间戳源自数据库创建之时,数据库名称或是来自DB_NAME初始化从参数,或者来自Cteate Database语句使用的名称。 每当数据文件或重演日志文件被添加内容、重新命名或者直接从数据库删除时,控制文件都要进行更新以反应物理结构的变化。记录下这些变化后,Oracle就可以:在数据库启动的时候,能够确定并打开数据文件和重演日子文件。 在必须要恢复数据库的时候,能够确定哪些文件是必须的、哪些文件是可用的。 PS:如果数据库的物理结构发生了改变(使用了Alert Database语句),用户应该立刻备份控制文件。 控制文件还记录了关于检查点的信息。每3秒,检查点进程(CKPT)就会在控制文件里记录重演日志文件的检查点位置信息。这些信息用于数据库的恢复过程,告诉数据库在这一点之前的已经记录下的重演条目不必进行恢复,因为它们已经被写入数据文件了。 由于控制文件对数据库的至关重要,所以联机存储着多个副本。这些文件一般存储在各个不同的磁盘上,以便将因磁盘试下哦引起的潜在危险降至最低程度。Oracle支持对同一个数据库并发的打开、书写多个相同的控制文件。通过为一个数据库在不同的磁盘上保存多个控制文件,可以幼小的降低对于控制文件可能发生的单点失败。例如,包含一个控制文件的磁盘崩溃了,如果Oracle试图访问这个被破坏的文件,当前实例就会失败,但是如果在不同的磁盘上保存了当前控制文件的复件,就可以重启一个实例而无需进行数据库恢复。

Oracle 内存分配与调整.

Oracle 内存分配与调整 一、前言 对于oracle 的内存的管理,截止到9iR2,都是相当重要的环节,管理不善,将可能给数据库带来严重的性能问题。下面我们将一步一步就内存管理的各个方面进行探讨。 二、概述 oracle 的内存可以按照共享和私有的角度分为系统全局区和进程全局区,也就是SGA 和PGA(process global area or private global area 。对于SGA 区域内的内存来说,是共享的全局的,在UNIX 上,必须为oracle 设置共享内存段(可以是一个或者多个,因为oracle 在UNIX 上是多进程;而在WINDOWS 上oracle 是单进程(多个线程,所以不用设置共享内存段。PGA 是属于进程(线程私有的区域。在oracle 使用共享服务器模式下(MTS,PGA 中的一部分,也就是UGA 会被放入共享内存 large_pool_size 中。对于SGA 部分,我们通过sqlplus 中查询可以看到: SQL> select * from v$sga; NAME V ALUE Fixed Size 454032 Variable Size 109051904 Database Buffers 385875968 Redo Buffers 667648 其中: Fixed Size:

oracle 的不同平台和不同版本下可能不一样,但对于确定环境是一个固定的值,里面存储了SGA 各部分组件的信息,可以看作引导建立SGA 的区域。Variable Size: 包含了shared_pool_size 、java_pool_size 、large_pool_size 等内存设置Database Buffers: 指数据缓冲区,在8i 中包含db_block_buffer*db_block_size 、 buffer_pool_keep 、buffer_pool_recycle 三部分内存。在9i 中包含db_cache_size 、 db_keep_cache_size 、db_recycle_cache_size 、db_nk_cache_size 。 Redo Buffers: 指日志缓冲区,log_buffer 。在这里要额外说明一点的是,对于v$parameter 、 v$sgastat 、v$sga 查询值可能不一样。v$parameter 里面的值,是指用户在初始化参 数文件里面设置的值,v$sgastat 是oracle 实际分配的日志缓冲区大小(因为缓冲区的分配值实际上是离散的,也不是以block 为最小单位进行分配的, v$sga 里面查询的值,是在oracle 分配了日志缓冲区后,为了保护日志缓冲区,设置了一些保护页,通常我们会发现保护页大小大约是11k(不同环境可能不一样。参考如下内容 SQL> select substr(name,1,10 name,substr(value,1,10 value 2 from v$parameter where name = 'log_buffer'; NAME V ALUE log_buffer 524288 SQL> select * from v$sgastat ; POOL NAME BYTES fixed_sga 454032

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内存调整建议

ABC公司Oracle数据库参数调整建议 1.Oracle参数initdb.ora (修改建议) 目前系统现在分析: (1)Windows 2003可以显示50G内存,但操作系统是32位,最多默认支持4G,用户进程支持2G,Oracle可能支持1.7G内存; (2)不清楚是否对操作系统做过支持大内存的调整;从下表的参数分析,可能没有修改; (3)不清楚此系统Windows是否允许在虚拟环境(Virtual Machine),故保守起见,我们的建议是:把内存往小里调整。 根据我们的经验,对Oracle数据库调整如下: 总内存控制在1.5G SGA控制在800M PGA使用700M testdb.__db_cache_size=469762048 testdb.__java_pool_size=8388608 testdb.__large_pool_size=8388608 testdb.__oracle_base='D:\app\Administrator'#ORACLE_BASE set from environment testdb.__pga_aggregate_target= 734003200 #700M #671088640 testdb.__sga_target=838860800 #800M #1249902592 testdb.__shared_io_pool_size=0 testdb.__shared_pool_size= 335544320 #320M #738197504 testdb.__streams_pool_size=8388608 *.audit_file_dest='D:\app\Administrator\admin\xbrldb\adump' *.audit_trail='db' *.compatible='11.2.0.0.0' *.control_files='E:\data\xbrldb\control01.ctl','D:\app\Administrator\flash_recovery_ area\xbrldb\control02.ctl' *.db_block_size=8192 *.db_domain='' *.db_name='xbrldb' *.db_recovery_file_dest='D:\app\Administrator\flash_recovery_area' *.db_recovery_file_dest_size=21474836480 *.diagnostic_dest='D:\app\Administrator' *.dispatchers='(PROTOCOL=TCP) (SERVICE=xbrldbXDB)' *.fast_start_mttr_target=30 *.job_queue_processes=1000 testdb.local_listener='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(H OST=10.24.58.100)(PORT=1531))))' *.log_archive_format='ARC%S_%R.%T' *.memory_target= 1610612736 #1.5G#1916796928

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 逻辑存储结构 逻辑存储结构是Oracle 数据库存储结构的核心内容,对Oracle 数据库的所有操作都会涉及到其逻辑存储结构。数据库的逻辑结构是从逻辑的角度分析数据库的构成,即创建数据库后形成的逻辑概念之间的关系。在逻辑上,Oracle 将保存的数据划分为一个个小单元来进行存储和维护,高一级的存储单元由一个或多个低一级的存储单元组成。Oracle 的逻辑存储单元从小到大依次为:数据块(DA TA BLOCKS )、盘区(EXTENT )、段(SEGMENTS )和表空间(TABLE SPACES ),图2-2显示了各逻辑单位之间的关系。 数据库 ...表空间 表空间段 段盘区 数据块盘区数据块 段段数据库...表空间表空间段段盘区数据块盘区数据块段 段 图2-2 数据库的逻辑存储组成 由图2-2可知,Oracle 数据库由多个表空间组成,而表空间又由许多段组成,段由多个盘区组成,盘区又由多个数据块组成。 1 数据块 数据块是Oracle 用来管理存储空间的最小单元,也是执行数据库输入输出操作时的最小单位。相对应地,操作系统执行输入输出操作的最小单位为一个操作系统块的大小。在操作系统中,执行I/O 操作是以操作系统块为单位,而在Oracle 中,执行的I/O 操作以Oracle 数据块为单位。 Oracle 块的大小是操作系统块大小的整数倍。以Windows NT 操作系统为例,NTFS 格式的磁盘分区一般为4KB 大小,因此Oracle 块的大小为8KB 等。数据块的标准大小由初始化参数DB_BLOCK_SIZE 确定,具有标准大小的块被称为标准块。Oracle 支持在同一个数据库中使用多种大小的块,与标准块大小不同的块称为非标准块。 可以通过查询V$PARAMETER 数据字典,可以获得参数DB_BLACK_SIZE 的值,该参数值同时也是数据块的尺寸大小。例如: SQL> select name,value 2 from v$parameter where name ='db_block_size'; NAME V ALUE --------------------------- -------------------------- db_block_size 8192 在数据块中可以存储各种类型的数据,如表数据、索引数据、簇数据等。无论数据块中存放何种类型的数据,块都具有相同的结构,图2-3列出一个Oracle 块的基本结构。

一分钟查一个案例带你看看Oracle数据库到底有多牛逼性能难题

一分钟查一个案例带你看看Oracle数据库到底有多牛逼 性能难题 问题来了 电话响了,是一位证券客户 DBA 的来电,看来,问题没过两天,又出现了。 接起电话,果不其然。 “小y,前天那个问题又重现了。重启后恢复正常,这次抓到了hangAnalyze,不过领导在身后一直催,所以没来得及抓取 systemstate dump 就重启了。你尽快帮忙分析下吧,hanganalyze 的 trace 文件 已经转到你邮箱了。” 就在 2 天前,该客户找到小 y, 他们有一套比较重要的系统出现了数据库无法登陆的情况,导致业务中断,重启后业务恢复,但原因未明,搞的他们压力很大。 可惜的是,他们是事后找过来,由于客户现场保护意识不足,最后也只能是巧妇难为无米之炊了… 总的来说,小 y 还算是比较熟悉证券行业的。 毕竟,小 y 多年来一直在银行、证券、航空等客户提供数据库专家支持服务,这其中就包括了北京 排名前 6 的所有证券公司。 简而言之,证券行业的要求就是快速恢复,快速恢复业务大于一切。 原因很简单,股价瞬息万变,作为股民,如果当时无法出售或者购买股票,甚至可能引发官司。所以,证券核心交易系统如果中断时间超过 5 分钟,则可以算得上是严重故障了,一旦被投诉,则可能会 被证监会通报,届时业务可能被降级,影响到证券公司的经营和收益。 结合这个特点,小 y 为客户制定了应急预案,看来收集 systemstate dump 是来不及了,只能先 收集 hangAnalyze, 时间来得及的话则可以继续收集 systemstate dump。收集 hangAnalyze 的命令 很简单,照敲就是了,没什么技术含量。 $sqlplus –prelim “/as sysdba” SQL>oradebug setmypid SQL>oradebug hanganalyze 3 .. 此处等上一会 .. SQL>oradebug hanganalyze 3 SQL>oradebug tracefile_name

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数据库实例的内存和进程结构 更新: 2010-04-27来源: 互联网字体:【大中小】 内存结构 在Oracle数据库系统中内存结构主要分为系统全局区(SGA)和程序全局区(PGA)。 SGA随着数据库实例的启动向操作系统申请分配一块内存结构,随着数据库实例的关闭释放,每一个Oracle数据库实例有且只有一个SGA。 PGA随着Oracle服务进程启动的时候申请分配的一块内存结构。如果在共享服务结构中PGA存在SGA 中。 下图展示Oracle的内存结构,在后面我们将用文字详细的表述各个部件。 系统全局区(SGA) 重要提示,提高SGA的大小可以在一定程度上提高Oracle数据库系统的性能,但你设置SGA的值如果不能锁定在内存物理页上,有些部分可能被交换到系统的交换文件中。这样你的Oracle数据库系统将变慢。 系统全局区是一组包含数据和控制信息的共享内存结构,允许Oracle服务的众多后台进程同时访问或修改其中的数据,所以有些时候也被称为―全局共享区‖,参数文件中的SGA_MAX_SIZE指定SGA动态大小。※共享池SharedPool ※数据高速缓存DatabaseBufferCache ※重做日志缓存RedoLogBufferCache ※ Java池(可选)JavaPool ※大缓冲池(可选)LagerPool 共享池 共享池存储了最近多数使用的执行SQL语句和最近使用的数据定义。它包含库高速缓存器和数据字典缓存器这两个与性能相关的内存结构。共享池的大小可以通过初始化参数文件(通常为init.ora)中的SHARED_POOL_SIZE决定。共享池是活动非常频繁的内存结构,会产生大量的内存碎片,所以你要确保它尽可能足够大。 库高速缓存器,他又包含共享SQL区和共享PL/SQL区两个组件区。为了提高SQL语句的性能,在提交SQL语句或PL/SQL程序块时Oracle服务器将先利用最近最少使用(LRU)算法检查库高速缓存中是否存在相同的SQL语句或PL/SQL程序块,若有则使用原有的分析树和执行路径。 数据字典缓存器,它收集最近使用的数据库中的数据定义信息。它包含数据文件、表、索引、列、用户、访问权限、其他数据库对象等信息。在分析阶段决定数据库对象的可访问信息。利用数据字典缓存器有效的改善了响应时间。它的大小由共享池的大小决定。 数据高速缓存 它存储数据文件中数据块的拷贝。利用这种结构使数据的更新操作性能大大的提高。数据高速缓存中的数据交换同样采用最近最少使用算法(LRU)。它的大小主要受到DB_BLOCK_SIZE决定。数据高速缓存它由DB_CACHE_SIZE、DB_KEEP_CACHE_SIZE、 DB_RECYCLE_CACHE_SIZE这些独立的子缓存器构成,同时它能动态的增长或收缩。 重做日志缓存

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

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