小表缓存到内存简析
+ d3 V# t* V/ K+ D! `+ R # }* L# w1 {' }9 g4 ^; V5 U
oracle的db_buffer_pool由三部分组成:3 I! Q1 h, [6 u" {
3 ~! ~2 A% m( q) ^; H/ v buffer_pool_defualt
) V% |$ s/ `( H; S3 r; i
# A9 @* z6 \( n2 D4 W buffer_pool_keep/ Z9 _, L( v6 ^: Z5 T( `. N
" l- ]8 u/ `4 Z. F, J buffer_pool_recycle0 h6 _) z# T# S+ ^! @3 _7 t) z
2 C; G# O1 ^5 \3 A
如果要把表钉死在内存中,也就是把表钉在keep区。
$ J: D& e+ z: F5 n3 I- H! x' j : G5 Q; \2 b# i' D
--表如果缓存的话是缓存在keep区2 O4 X1 @% L: Q! K8 A
+ U# `; F5 m/ _# e* A
SQL> alter table t1 storage(buffer_pool keep);
5 [0 G* Z E0 W' Y8 s2 q 1 {" K# F7 \/ n% m
表已更改。
+ R; V$ X7 [2 f6 y9 c . A# z$ I- J# m/ C
--查询到放在keep区中的表,但是不意味着表已经被缓存。. i3 m) C3 h- T
$ i( X" N1 P- l6 j6 L; l+ A: [ SQL> select table_name from dba_tables where buffer_pool='KEEP';" l/ `1 `" l# j: D$ o# Q
" s( M6 _9 X2 U TABLE_NAME$ v$ E" d" V3 G% e# ~, q% R* A
) D# y, p0 {5 s! i0 f; |/ C$ l) M2 ~ ------------------------------6 m0 |6 C( w4 u8 [% U
0 s+ S% H/ z' j. T; F" ~" f$ ^( V& G T19 L) ~1 H& ~8 ?5 E/ n
3 |( M" E( J1 Y' t [& ^: a
--将表T1缓存/ p9 G& D5 }' \& H; \2 F
8 x/ a6 C5 K; `) ~ SQL> alter table t1 cache;4 ^9 |1 a' J+ A; U* ~3 G
; Z/ K) N# m% f# @& u2 C9 L z 表已更改。
! `) j9 a. K; P$ J L1 P* S9 e. a1 m9 S1 u9 O
--查询到表是否已经被缓存
. N" b1 H& n) J7 X I
! V% ^9 I8 Z5 _4 o2 Z% ^ SQL>select table_name from dba_tables where trim(cache)='Y';
" p. }% i# @- u7 k @
! q) ?8 A3 P2 u7 B9 f/ K 加入到keep区的表不是说不能被移出内存,不过是比较不容易移出内存。
* L, q% c; r6 m! W% J1 q
( i" [8 ^- p) {# q0 Q --手工将指定表移出内存' L4 M% A( d( G2 k) c
9 F# x0 V; v1 O9 ]$ n* N% N1 D
SQL> alter table t1 nocache;
: p3 U7 V3 s, m4 d( X' B4 _; { 2 o4 ~4 u- Q7 o8 T/ f/ e7 ?
表已更改。 |