Oracle 11G R2的内存管理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle 11G R2的内存管理相关的知识,希望对你有一定的参考价值。

基本知识点

基本的内存结构:SGA+PGA+UGA+Software code area(软件代码区)

技术分享

了解SGA内存的组件与一些常用的功能

了解oracle 11G地自动内存管理功能

具体介绍

oracle数据库实例是由一些列的系统全局区域与后台进程组成。

一个客户端访问数据库的方式是客户端进程---->Program global are----->Database buffer cache,同时在Redo log buffer重写一份

oracle 内存管理的方式:自动内存管理与手动内存管理,本文主要讲解自动内存管理(Automatic memory management AMM)

1. Oracle 11G启动自动内存管理功能

对于oracle 11G,启用内存自动管理功能,就是保证memory_target参数不为0。对于通过DBCA创建数据库,使用默认方式安装,默认已经启动自动内存管理功能,设置memory_target参数大小是总内存大小的40%

2. 了解SGA 重要组件

比较重要的SGA组件

2 数据库缓存

2 重做日志缓存

2 共享池

2 大池

2 JAVA池

2 流池

2 固定的SGA

数据库缓存池(Database buffer cache)也叫缓冲池,是内存区域存放从数据文件读取的一份备份。缓冲池是主内存地址通过缓冲管理器存放了临时缓存的当前的或最近使用的数据块。所有当前连接到数据库实例的用户共享这个缓冲池。

使用数据库缓冲池的目的是:

? 优化物理的I/O

? 保持频繁的访问缓冲区的数据库,减少到磁盘的块操作,从而增大访问速度

数据库缓存池中一些术语:

Buffer 状态(Buffer state

Unused:没有使用过的空间

Clean:以前使用过的空间,标记为clean后,可以再次使用,允许重写

Dirty:需要写入磁盘的数据

Buffer mode

Current mode

Consistent Mode

Logical I/O 也叫buffer I/O,就是直接从缓存中读取I/O

Physical I/O, 从物理磁盘读取的I/O

Buffer Write:DBWn进程周期的将胀数据写入磁盘,发生写入磁盘的条件就是

服务器进程为了读入一个新块到缓存中而找不到空闲缓存

Buffer Reads

Buffer cache hit ration(缓存命中率):在缓存中读取到数据块与读到总的数据块(包括从缓存与磁盘中读取数据块)的比值

Buffers and full table scan

重做日志缓存:重做日志缓存就是SGA区域的一个存放改变数据库的重做实体(比如sql语句)的循环缓存。重建实体包括重建,重做的DML/DDL操作

共享池(Shared Pool:共享池缓存各种类型的程序数据,比如说pl/sql语句,系统参数与数据字典信息

大池:它是一个可选的内存分配区域,它是一个辅助的缓存区域。

Java池: 他是一个内存区域存放所有关于jave代码的会话,也就是管理java连接的一个内存区域

Stream :关于流连接分配的一个内存区域

Fixed SGA: 内部保留的区域,它描述了数据库与实例状态的信息等等。

应用举例

1. 查看是否启用oracle内存自动管理功能

memory_target为非0,启用此内存自动管理功能

SQL> show parameter memory

NAME TYPE VALUE

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

hi_shared_memory_address integer 0

memory_max_target big integer 1232M

memory_target big integer 1232M

shared_memory_address integer 0

2. 修改memory_target大小

比如说我们增加了内存,oracle数据库并不会自动增加memory_target大小,所以需要手动修改。理解memory_target是一个会自动更新的参数,它可以不需要重启就能生效,而memory_max_target参数需要重启而生效。memory_max_target跟随memory_target 参数。

******************************************************************************

SQL> alter system set memory_target=1230M #默认scope=both,所以没有写

2 ;

System altered.

SQL> show parameter memory

NAME TYPE VALUE

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

hi_shared_memory_address integer 0

memory_max_target big integer 1248M

memory_target big integer 1232M

shared_memory_address integer 0

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup

ORACLE instance started.

Total System Global Area 1286066176 bytes

Fixed Size 2254864 bytes

Variable Size 754976752 bytes

Database Buffers 520093696 bytes

Redo Buffers 8740864 bytes

Database mounted.

Database opened.

SQL> show parameter memory;

NAME TYPE VALUE

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

hi_shared_memory_address integer 0

memory_max_target big integer 1232M

memory_target big integer 1232M

shared_memory_address integer 0

SQL>

*******************************************************************************

3. 查看SGA大小分配

在启动数据库与查看V$SGA视图,都可以查看数据库缓存区与重做日志缓存区分配的内存大小。

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup

ORACLE instance started.

Total System Global Area 1286066176 bytes

Fixed Size 2254864 bytes

Variable Size 805308400 bytes

Database Buffers 469762048 bytes

Redo Buffers 8740864 bytes

Database mounted.

Database opened.

SQL> select * from v$sga;

NAME VALUE

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

Fixed Size 2254864

Variable Size 805308400

Database Buffers 469762048

Redo Buffers 8740864

SQL>

4. 查看V$SGASTAT与V$PGASTAT信息

***************************************************************************

SQL> select pool, sum(Bytes) as Pool_Size from v$sgastat group by pool;

POOL POOL_SIZE

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

531089424

java pool 16777216

shared pool 201326592

large pool 16777216

SQL> select * from v$pgastat;

NAME VALUE UNIT

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

aggregate PGA target parameter 520093696 bytes

aggregate PGA auto target 436313088 bytes

global memory bound 104017920 bytes

total PGA inuse 35298304 bytes

total PGA allocated 53518336 bytes

maximum PGA allocated 54173696 bytes

total freeable PGA memory 12845056 bytes

process count 28

max processes count 28

PGA memory freed back to OS 9043968 bytes

total PGA used for auto workar 0 bytes

NAME VALUE UNIT

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

eas

maximum PGA used for auto work 0 bytes

areas

total PGA used for manual work 0 bytes

areas

maximum PGA used for manual wo 0 bytes

rkareas

NAME VALUE UNIT

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

over allocation count 0

bytes processed 12819456 bytes

extra bytes read/written 0 bytes

cache hit percentage 100 percent

recompute count (total) 309

19 rows selected.

SQL>

*******************************************************************************

以上是关于Oracle 11G R2的内存管理的主要内容,如果未能解决你的问题,请参考以下文章

关于oracle11G的自动内存管理MEMORY_TARGET和MEMORY_MAX_TARGET

Oracle 11g R2 用户管理

Oracle 11g R2 配置管理

Oracle Database 11G R2 表空间管理

Oracle 11g R2 管理归档日志文件

Oracle 11g R2(11.2.0.4.0)+udev搭建RAC