● Monitoring and Managing Memory
◎ SGA
: 공유메모리 영역
관련 파라미터의 분류
ASMM (Automatic Shared Memory Management)
SGA의 크기를 자동으로 조정해줌
관련 파라미터 :
SGA_TARGET (Auto-tuned Dynamic + Manually-tuned Dynamic + Manually-tuned Static{그림 참조))
SGA_MAX_SIZE = 16G : static
SGA_TARGET = 10G : dynamic
SGA_TARGET 변경에 따른 각 파라미터의 변경특성
1. SGA_TARGET을 늘이거나 줄이면 auto-tuned dynamic만 늘거나 준다.
2. manually tuned가 늘이거나 줄이면 auto-tuned dynamic이 영향을 받는다.
3. auto-tuned dynamic중 각 파라미터의 크기를 줄이면 그 파라미터의 하한값만 변경되는 것.
4. SGA_TARGET을 0으로 하면 ASMM이 off가 되고 각 파라미터 상태로 고정이 된다.
MMAN (Memory Manager)
이상적인 메모리의 분배를 위해 수분에 한번씩 메모리를 모니터링한다.
○ Database Buffer Cache
- 데이터 블럭이 복사되는 메모리 영역.
- 2k, 4k, 8k, 16k, 32k -> 잘 결정할 것
- 집계를 주로 하는 프로그램의 경우는 데이터 블럭이 클수록 좋음.
- 관련 파라미터 : DB_CACHE_SIZE
DB_KEEP_BUFFER_SIZE
DB_RECYCLE_BUFFER_SIZE
DB_BLOCK_SIZE(한번 정하면 못바꿈)
DB_CACHE_ADVICE
- 자주쓰는 데이터 블럭의 데이터가 일부 영역에 caching되어 있다.
- 저장되는 데이터와 사용하는 패턴에 따라 잘 결정해야함.
- CR블럭 : 데이터베이스 블럭은 하나지만 읽기 일관성을 위해 존재하는 복사한 이미지
- 블럭의 분류
standard block
storage(INITIAL 10K NEXT 10K MINEXTENTS 3 MAXEXTENTS 10 PCTINCREASE 0 buffer_pool default)
tablespace users5;
.......
db_cache_size = 100m(캐쉬될 메모리의 크기)
create table t22 (c1 number)
storage(INITIAL 10K NEXT 10K MINEXTENTS 3 MAXEXTENTS 10 PCTINCREASE 0 buffer_pool keep)
tablespace users5;
.........
db_keep_cache_size = 40m
(keep이란 메모리 영역의 한번에 캐쉬될 메모리의 크기. 정말 자주 사용되므로 메모리에 올려놓고 disk i/o를 줄임)
create table t22 (c1 number)
storage(INITIAL 10K NEXT 10K MINEXTENTS 3 MAXEXTENTS 10 PCTINCREASE 0 buffer_pool recycle)
tablespace users5;
..............
db_recycle_cache_size = 20m
(recycle이란 메모리 영역의 한번에 캐쉬될 메모리의 크기,
keep영역보다는 덜 사용되지만 default보다는 많이 사용되는 데이터에 사용)
default, keep, recycle의 의미는 그냥 a,b,c와 같은 의미이다. 특별한 취급이 없음.
non standard block
create tablespace ts4k
datafile ~~~~~ size 100m blocksize 4k;
-- 이 데이터 파일은 데이터 블럭이 4k로 이루어짐
create table t1 (...) tablespace ts4k;
- LRU lists(Least Recently Used Lists)
: 가장 최근에 사용된 버퍼 캐쉬의 주소부터 오랫동안 사용이 안된 버퍼캐쉬의 순서로 저장되어 있는 리스트
서버 프로세서가 주로 사용.
- Checkpoint queue
: 가장 오래된 dirty buffer부터 차례대로 들어가 있음.
DBWR가 내려써야 할 순서
○ Shared pool
- Library Cache
: 최근에 사용된 SQL, 파싱된 SQL이 저장됨
- Data Dictionary Cache
: 최근에 사용된 metadata가 저장됨
○ Large pool
- UGA(User Globalization Area)
: 세션데이터. Shared Server Process들이 사용하는 메모리 영역
- RMAN이 백업과 복원, 복구시 사용.
- 설정을 해줘야 공간할당이 됨.할당이 안될 경우에는 shared pool을 사용.
-> 경합을 줄이기 위해서는 공간할당을 해주는 것이 좋음
○ Java pool
- jvm이 내장되어 있음
- java의 클래스, method등이 저장 가능.
◎ PGA
○ 서버프로세스가 독자적으로 사용하는 메모리 영역이지만 대량의 데이터를 정렬해야 하는 상황에서는 disk i/o가 발생하므로
다른 서버 프로세스에 영향을 줄 수 있음.
○ PGA의 크기는 SGA의 크기와 비교해서 결정
OLTP 환경 - SGA:PGA = 8:2
OLAP 환경 - SGA:PGA = 5:5
○ 관련 파라미터 :
- PGA_AGGREGATE_TARGET : 자동관리, 총량제
PGA_AGGREGATE_TARGET = 4G이더라도 4G까지 제한을 두는 것은 아님.세션이 많아지면 늘어날 수도 있음.
- *_AREA_SIZE : 수동관리, 세션별 제한
SORT_AREA_SIZE = 1M : 정렬시 사용할 수 있는 최대의 메모리가 1M
읽기(3G) -> 정렬(1G*3) -> Merge(3G) : 정렬해야 하는 데이터가 3M일 경우.
○ 관련 statistics
- v$pgastat의 cache hit percentage :
http://download.oracle.com/docs/cd/B19306_01/server.102/b14211/memory.htm#i48203
- v$sql_workarea_histogram
: 빈도수를 나타내는 막대그래프
Optimal -> 메모리 정렬
Onepass -> 한번 disk i/o후 merge과정을 통한 return
Multipass -> disk에서 sort run을 하고 이를 다시하여 merge하는 과정
sga의 크기를 줄여서라도 없애야 한다.
ex) Data : 10G
i/o slot : 256kb
Moptimal : 약 11G
Monepass : 약 76M
◎ 효율적인 메모리 사용 : 가이드라인
○ buffer cache hit ratio를 높이는 것이 좋다.
but, hit ratio만으로는 정확한 진단이 어렵다.-> wait 지표를 봐야 한다.
ex) 100만 블럭 A 99%(99%를 메모리에서, 1%는 디스크에서 읽음)
100블럭 B 60%(60%를 메모리에서, 40%는 디스크에서 읽음)
○ memory advisor를 이용할 것.
기타 참고사항
- PGA의 크기 관련 파라미터 : PGA_AGGREGATE_TARGET
- performance 관련 query
select * from v$latch;
select * from v$system_event;
select * from v$event_name;
- v$sga_target_advice;
- MEMORY_TARGET (11g 파라미터)
- CGA (Call Globalization Area)
'Oracle > Tuning' 카테고리의 다른 글
[펌]SQL*TRACE와 TKPROF (0) | 2010.01.13 |
---|---|
Statistics, Waits (0) | 2010.01.13 |
Tuning Overview (0) | 2010.01.12 |
Automatic Performance Management (0) | 2009.12.29 |
Dynamic Performance View의 이름 / 설명 (0) | 2009.12.26 |