基本知识点
基本的内存结构: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>
*******************************************************************************