目的 % ]+ e. Y6 J( u7 T
但愿经由过程清算此文档 , 使巨匠对 oracle 内存结构有一个周全的体味 , 并在现实的工作中矫捷应用 , 使 oracle 的内存机能达到最优设置装备摆设,晋升应用轨范纺暌钩速度,并进行合理的内存使用 .# ?4 j" q% c$ v2 |
实例结构
2 w4 t: P3 ]" ^' a oracle 实例 = 内存结构 + 历程结构# H. S" C2 T4 ^. N" F8 ~, m
oracle 实例启动的过程,其实就是 oracle 内存参数设置的值加载到内存中,并启动响应的后台历程进行相关的处事过程。
' S0 B! Y+ a, L+ \. N" n, O: ?9 ` p" }历程结构 5 E; q7 _) |; |; }- @& w2 O
oracle 历程 = 处事器历程 + 用户历程4 j R+ V4 A+ d' B! U5 j
几个主要的后台历程 :- {" w& p. A& R% M& t/ M, p
DBWR :数据写入历程 .
2 N0 w& s: q' q! D LGWR: 日志写入历程 .
* [7 e: p# M5 ` ARCH: 归档历程 .
* t. L2 w4 d/ U: y: @ CKPT: 搜检点历程 ( 日志切换;上一个搜检点之后,又跨越了指定的时刻;预界说的日志块写入磁盘;例程封锁, DBA 强制发生 , 表空间 offline)
! g" W3 w4 f" \& s: q$ F3 ^ LCKn ( 0-9 ):封锁历程 .
3 W' K# g: H5 t! J" {6 ~ Dnnn: 调剂历程 .
4 s8 r: H7 }4 h# ~内存结构 ( 我们重点讲解的 )
* |8 }+ Q* {. G& B) J 内存结构 =SGA (系统全局区) +PGA (轨范全局区)
: V' w* c4 [5 ~ a: b- l' l1 _0 l SGA :是用于存储数据库信息的内存区,该信息为数据库历程所共享。它包含 Oracle 处事器的数据和节制信息 , 它是在 Oracle 处事器所驻留的计较机的现实内存中得以分配,如不美观现实内存不够再往虚拟内存中写* l8 ~# E' j! \4 u2 |
我们重点就是设置 SGA ,理论上 SGA 可占 OS 系统物理内存的 1/2 —— 1/3/ v1 E2 {# i: m1 _
原则: SGA+PGA+OS 使用内存 < 总物理 RAM; x7 k: u$ U! f! U) u
SGA=((db_block_buffers*blocksize)+(shared_pool_size+large_pool_size+java_pool_size+log_buffers)+1MB
' x M7 X. Z; E6 }$ n 1 、 SGA 系统全局区 .( 搜罗以下五个区 )9 l5 K) f7 q% z( G
A 、数据缓冲区 : ( db_block_buffers )存储由磁盘数据文件读入的数据。6 H! j# ^5 |* [" o! q3 ]
巨细 : db_block_buffers*db_block_size# r/ x+ [6 ^ k1 q
Oracle9i 设置数据缓冲区为: Db_cache_size* A; A. |) M/ j$ K& }$ u( F |
原则: SGA 中首要设置对象,一般为可用内存 40% 。
4 I0 y% {: }3 S- B8 m+ H8 g n B 、共享池 : ( shared_pool_size ) : 数据字典, sql 缓冲, pl/sql 语法剖析 . 加年夜可提速度。
0 G k3 g4 E% m+ w* U7 ^0 L 原则: SGA 中首要设置对象,一般为可用内存 10%
: I; _- p! x* i C 、日志缓冲区 : ( log_buffer )存储数据库的改削信息 .
0 a, q# o+ G! E |) ?1 \ 原则: 128K ---- 1M 之间,不应该太年夜; ~' J) |& y* Y8 q$ V& P x* i3 ?( Z0 C' A
D 、 JAVA 池( Java_pool_size )首要用于 JAVA 说话的开发 .
p; G# _6 E& k! g* Y" ]/ L5 w 原则:若不使用 java ,原则上不能小于 20M ,给 30M 凡是就够了
2 v6 a! E1 U- b; @' K( L E 、 年夜池( Large_pool_size ) 如不美观不设置 MTS ,首要用于数据库备份恢复打点器 RMAN 。
- k; |% c: d' N7 \& Q 原则:若不使用 MTS,5---- 10M 之间,不应该太年夜
5 g" W2 a, ]+ k5 S. u$ H) }$ U: b SGA=. db_block_buffers*db_block_size+ shared_pool_size+ log_buffer+Java_pool+size+large_pool_size5 V2 \* W2 J ^& K( x
原则: 达到可用内存的 55-58% 就可以了 .7 z1 L( D$ h# T3 N( M3 q
2 、 PGA 轨范全局区& J6 E' i; W" u0 {% d
PGA :包含单个处事器历程或单个后台历程的数据和节制信息,与几个历程共享的 SGA 正相反 PGA 是只被一个历程使用的区域, PGA 在建树历程时分配在终止历程时收受接管 .
, X7 L, S2 U2 Y4 z+ G; P4 {7 N% x0 s A 、 Sort_area_size 用于排序所占内存) v& A4 I" H0 ?$ V
B 、 Hash_area_size 用于散列联接,位图索引$ p, F& ?7 a1 ?0 p+ q0 O0 ]
这两个参数在非 MTS 下都是属于 PGA ,不属于 SGA, 是为每个 session 零丁分配的,在我们的处事器上除了 OS + SGA, 必然要考虑这两部门
+ p2 a, \8 \% D9 `; q1 _ 原则: OS 使用内存 +SGA+ 并发执行历程数 *(sort_area_size+hash_ara_size+2M) < 0.7* 总内存
& _& I) z; G# J$ z( v- M实例设置装备摆设 ( T$ n+ B" @ H8 c1 C6 b, F4 c
一:物理内存多年夜
L' l( c$ {, v 二:操作系统估量需要使用若干好多内存, ?5 I( i/ @" R8 c! ^
三:数据库是使用文件系统仍是裸设备
9 k& I3 k" t3 P9 E4 e9 s 四:有若干好多并发毗连3 D( F6 @1 ?0 O/ S# E5 d6 d1 ]
五:应用是 OLTP 类型仍是 OLAP 类型" M. H' j: R7 d" X, h8 ?5 g
根基把握的原则是, db_block_buffer 凡是可以尽可能的年夜, shared_pool_size 要适度, log_buffer 凡是年夜到几百 K 到 1M 就差不多了
! e% ?8 h1 d5 X6 m+ \ q. q A 、如不美观 512M RAM 单个 CPU db_block_size 是 8192 bytes, r8 z- q8 b6 i; M7 s: T
SGA=0.55*512M=280M 摆布8 x- R! C" C W9 n' E$ n! d% H/ G
建议 shared_pool_size = 50M, db_block_buffer* db_block_size = 200M
t4 s( H1 |$ h( ` 具体 : shared_pool_size =52428800 #50M/ t0 `% Z! [% Z1 ^" C
db_block_buffer=25600 #200M0 n* K$ r. ?: u' J; v5 V/ M
log_buffer = 131072 # 128k (128K*CPU 个数 )# ]$ `' b. o- x: r8 o! `6 g
large_pool_size=7864320 #7.5M& Q( c, d9 i& Z9 l5 O
java_pool_size = 20971520 # 20 M8 b1 G8 r, ^# ?: V9 \1 {9 z" A9 i6 t
sort_area_size = 524288 # 512k (65k--2M)$ o) ~% Q' O0 g! t7 q
sort_area_retained_size = 524288 # MTS 时 sort_area_retained_size = sort_area_size
# ~ I0 m6 Y E7 N B 、如不美观 1G RAM 单个 CPU db_block_size 是 8192 bytes
5 W( |$ e3 R9 i7 I
' h; F, c- u# p4 m u3 Y8 s, ` SGA=0.55*1024M=563M 摆布 |