浅析Oracle 的体系架构及内存分配机制

首先讲 Oracle 包含 三个部分:

1:  Oracle Server :Oracle服务器,一般可以看作是一个摸得着看的见的机器,我们可以称之为服务器。也可以看作是一套运行在服务器上的软件。

 在Oracle官方网站是这样定义的: 

An Oracle server is a database management system that provides an open ,comperhensive ,integrated approach to information management 

An Oralce server consits of an Oracle instance and an Oracle database;

从上面的一段文字我们可以看出Oracle server是一个比较大的概念 是一个数据库管理系统,提供开放的,复杂的集成的信息管理系统。里面包含两个一个就是我们通常所说的Instance(Oracle实例)另外一个就是Oracle数据库(Oracle database)。

 

 

            图1:Oracle  Server图解

2:Oracle Instance (Oracle 实例)

 

定义:A Oracle Instance  is means to access an Oracle database;(是Oracle访问数据哭的一种手段)

Alway open one and only one database.这句话就是说Oralce的一个Instance对应一个也只能一个database来访问。而database可以有多个Instance与之对应并访问,在一般的方式下Oracle Instance  与Oracledatabase是 1:1 的关系 而在集群的时候是 n:1 的关系。

另外,Oracle Instance 是由内存以及oracle的后台进程构成(详见下图2)。


 

图2:The  structure of Oralce Instance 

 

 

 

 

 

 

 

Connection:Oracle客户端与进程建立的TCP连接。

Server Process:服务进程,主要是用于处理客户端和后台连接

在通过安全验证后,Oracle链接就建立起了一个Session(session) 3:Oracle Database

An Oracle database is a collection of data that is threaded as an unit.It. Constists of three file type.

Oracle database说白了就是一些数据文件,这三种文件作为一个整体构成了Oracle database。

Oracledatabase 包含三种文件: 数据文件 (datafiles 真正的数据文件,用于存储真正的数据文件) 、  控制文件 (Control files 操作Oracle数据的datafile的文件,提供具体的控制信息) 、 重做日志文件 (记录者数据库的改变信息及其状态,作用主要是用于进行数据恢复)。这些是Oracle 的基本的文件。另外在Oracle外围有Parameterfile(主要用于存贮参数)Password  f ile主要是存储口令。Archived Log file(归档日志文件),这文件与Redo Log file相辅相成。归档日志文件,是为了进一步对数据进行恢复(解决Redo log循环覆盖的问题的一种方案。)

 

以d bf    为后缀的是 数据文件

以l og 为后缀的是 日志文件

以c tl 为后缀的 控制文件

如下图

               

解释描述

p s- ef | more

 

内存架构(Memory  Structure)

    系统全局区(SGA):在一个Instance启动的时候进行分配,而且是Instance的基本组成部分,此内存比较大。

   程序全局区(PGA):在一个Server Process启动的时候进行分配。

 

Ipcs(进程通信机制)

Show sga;

 

 

接着讲述Oracle  SGA 的内存分配

1: SGA基本的介绍

a. Shared Pool共享池

b. Dataabse Buffer Cache (数据块缓存)

c. Redo Log Buffer(重做日志缓冲区)

d. Large Pool(大池)

e. Java Pool (Java 池)

f. Others其他的

 

在Oracle 9i 以后  Oracle的SGA就可以动态进行分配。随着数据量的增大其内存必定要进行扩张,所以Oracle9i后SGA就出现了的动态参数设置。

SGA_MAX_SIZE(最大的内存大小)

查看 granules

 

Select component ,granule_size from v_$sga_dynamic component s ;

 

常见参数:

DB_CACHE_SIZE

LOG_BUFFER

SHARED_POOL_SIZE

LARGE_POOL_SIZE

JAVA_POOL_SIZE

 

 

 

 

g. Shared Pool共享池

 

I.用来存储的已经解析的SQL

II.存储当前数据的定义的信息。

Shared Pool共享池由 Library Cache(存储的是经过编译解析的的SQL和PL/SQL语句的内容,所以它包含几个部分,一个部分是 Shared SQL area 另外一部分是 Shared  PL/SQL area 以及其他的区如privariy area等).它是由LRU(least recently used)算法进行管理的。

 

Data Dictionary Cache(数据字典缓存)

修改参数SQL命令示例:

ALTER SYS SET SHARED_POOL_SIZE = 64M;(设置共享池的大小)

 

h. Dataabse Buffer Cache (数据块缓存)

包含来自数据文件的数据,以及将要保存的数据。

查询时,Oracle会先把从磁盘读取的数据放入内存,以后再查询相关数据时不用再次读取磁盘。插入和更新时,Oracle会现在该区中缓存数据,之后批量写到硬盘中。通过块缓冲区,Oracle可以通过内存缓存提高磁盘的I/O性能。

  块缓冲区中有三个区域:

  默认池(Default pool):所有数据默认都在这里缓存。

  保持池(Keep pool):用来缓存需要多次重用的数据。

  回收池(Recycle pool):用来缓存很少重用的数据。

  原来只有一个默认池,所有数据都在这里缓存。这样会产生一个问题:大量很少重用的数据会把需重用的数据“挤出”缓冲区,造成磁盘I/O增加,运行速度下降。后来分出了保持池和回收池根据是否经常重用来分别缓存数据。

  这三部分内存区需要手动确定大小,并且之间没有共享。例如:保持池中已经满了,而回收池中还有大量空闲内存,这时回收池的内存不会分配给保持池。

  9i开始,还可以设置db_nk_cache。9i之前数据库只能使用相同的块大小。9i开始同一个数据库可以使用多种块大小(2KB,4KB,8KB,16KB,32KB),这些块需要在各自的db_nk_cache中缓存。如果为不同的表空间指定了不同的块大小,需要为其设置各自的缓冲区。 设置 数据块缓存目的在于提高性能。

 

常见参数:

DB_BLOCK_SIZE

DB_CACHE_SIZE

DB_KEEP_CACHE_SIZE

DB_RECYCEL_CACHE_SIZE

修改参数SQL命令示例:

ALTER SYSTEM SET DB_CACHE_SIZE = 96M;

 

i. Redo Log Buffer(重做日志缓冲区)

     数据写到重做日志文件之前在这里缓存,在以下情况中触发:

  每隔3秒

  缓存达到1MB或1/3满时

  用户提交时

  缓冲区的数据写入磁盘前  

    

j. Large Pool(大池)

 

下面三种情况使用到大池:

  并行执行:存放进程间的消息缓冲区

  RMAN:某些情况下用于磁盘I/O缓冲区

  共享服务器模式:共享服务器模式下UGA在大池中分配(如果设置了大池)  

k. Java Pool (Java 池)

      在数据库中运行Java代码时用到这部分内存。例如:编写Java存储过程在服务器内运行。需要注意的是,该内存与常见的Java编写的B/S系统并没关系。用JAVA语言代替PL/SQL语言在数据库中写存储过程才会用到这部分内存。  

Others其他的 (如Stream  Buffer 这里就不再赘述。

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值