행위

"SGA 와 PGA"의 두 판 사이의 차이

DB CAFE

(V$SGA_RESIZE_OPS)
(V$SGA_RESIZE_OPS)
117번째 줄: 117번째 줄:
 
==== V$SGA_RESIZE_OPS ====
 
==== V$SGA_RESIZE_OPS ====
 
: SGA 메모리 변경이력을 확인하여 최대로 증가한 값을 기준으로 수동 세팅 설정  
 
: SGA 메모리 변경이력을 확인하여 최대로 증가한 값을 기준으로 수동 세팅 설정  
;- SHRINK : 감소
+
- SHRINK : 감소
;- GROW  : 증가
+
- GROW  : 증가
 
   
 
   
 
<source lang=sql>
 
<source lang=sql>

2020년 1월 29일 (수) 01:39 판

thumb_up 추천메뉴 바로가기


1 SGA 확인/변경[편집]

1.1 ASMM(Automatic Shared Memory Management)[편집]

  1. 10g부터 SGA구성 요소 중 Shared pool, DB buffer cache, Large pool, Java pool, Streams Pool 메모리 자동 관리.
  2. MMAN 프로세스가 5분 마다 주기적으로 수집한 작업부하(Workload) 정보를 바탕으로 동적으로 구성, 메모리는 필요한 곳으로 동적으로 할당.

1.1.1 ASMM 사용 조건[편집]

  1. STATISTICS_LEVEL Parameter 값이 typical 또는 ALL 로 설정
  2. SGA_TARGET Parameter 값을 0 보다 큰 값으로 설정(0은 사용하지 않음을 의미)
  3. SGA_MAX_SIZE : ASMM에서 사용할 최대값 지정.
  4. SGA_MAX_SIZE와 SGA_TARGET은 동일한 값으로 설정 권장.
  5. DB_CACHE_SIZE =0
  6. JAVA_POOL_SIZE =0
  7. LARGE_POOL_SIZE=0
  8. SHARED_POOL_SIZE = 0
  9. STREAMS_POOL_SIZE = 0
  10. REDO LOG BUFFER 를 제외하고 대부분 자동 조절함.

주의 :sga_target 설정 시 REDO LOG BUUFER SIZE 는 항상 빼고 셋팅 할 것.

  • 예시
SGA_TARGET = 8G

DB_CACHE_SIZE =0
JAVA_POOL_SIZE =0
LARGE_POOL_SIZE=0
SHARED_POOL_SIZE = 0
STREAMS_POOL_SIZE = 0

==> 위와 같이 설정 시 최소 값은 기본 값으로 구성되며 최대 8G

DB_CACHE_SIZE = 1G 로 설정시 최소 값은 1G 유지하고, 최대 8G


- SGA_MAX_SIZE

: SGA 전체의 최대 크기, SGA관련 파라미터들은 SGA_MAX_SIZE 한도 내에서 파라미터의 크기를 변경

- Oracle 9i 이후부터는 DBA가 ALTER SYSTEM 명령을 이용해서 SGA 파라미터의 크기를 동적으로 변경

 'Dynamic SGA'라고 함.

- 데이터베이스를 shutdown/startup 없이 작업이 가능

- Oracle 10g에서 Dynamic SGA를 사용할 수 있는 SGA 관련 파라미터는

 DB_CACHE_SIZE, LOG_BUFFER, SHARED_POOL_SIZE, LARGE_POOL_SIZE, JAVA_POOL_SIZE

- SGA 파라미터의 크기를 늘려주기 위해서는 필요한 만큼의 Free Granule이 존재해야만 하며,

 현재 사용하고 있는 SGA의 크기가 SGA_MAX_SIZE보다 작아야 합니다.
※ Granule 
  - Granule은 가상 메모리 상의 연속된 공간으로, dynamic SGA 모델에서 할당할 수 있는 최소 단위.
  - 이 Granule의 크기는 SGA 전체의 추정 값 (SGA_MAX_SIZE)에 따라 구분.
   if estimated SGA size is < 128M   4MB  else  16MB
  - Dynamic SGA를 사용할 수 있는 SGA관련 파라미터는 이 Granule 단위로 늘어나거나 줄어들 수 있습니다.

1.2 SGA 정보[편집]

1.2.1 SQL*Plus에서 SHOW SGA 명령어[편집]

SQL> SHOW SGA;
 Total System Global Area  171966464 bytes
 Fixed Size                   787988 bytes
 Variable Size             145750508 bytes
 Database Buffers           25165824 bytes
 Redo Buffers                 262144 bytes

◈ Total System Global Area

- SGA를 구성하는 영역 크기의 합계로 SGA_MAX_SIZE 파라미터로부터 영향 받음.

◈ Fixed Size

- 데이터베이스나 인스턴스의 상태를 저장하는 영역으로, 백그라운드 프로세스가 액세스 하는 영역
- 사용자 데이터는 저장되지 않고, 일반적으로 100k 미만의 영역을 차지함

◈ Variable Size

- 이 영역의 크기는 SHARED_POOL_SIZE, LARGE_POOL_SIZE, JAVA_POOL_SIZE 파라미터로부터 영향을 받음

◈ Database Buffers

- 데이터파일로 부터 읽어 들인 데이터 블록 내용을 저장하는 영역으로 DB_CACHE_SIZE 파라미터로부터 영향

◈ Redo Buffers

- 데이터베이스에 가해진 모든 변경 사항에 대한 내역을 저장하는 Redo Log Buffer의 크기로 LOG_BUFFER 파라미터로부터 영향

1.2.1.1 V$SGAINFO 뷰 조회[편집]

SQL> SELECT * FROM V$SGAINFO;

NAME                                  BYTES RES
-------------------------------- ---------- ---
Fixed SGA Size                      2057528 No
Redo Buffers                       14716928 No
Buffer Cache Size                1593835520 Yes
Shared Pool Size                  469762048 Yes
Large Pool Size                    16777216 Yes
Java Pool Size                     16777216 Yes
Streams Pool Size                  33554432 Yes
Granule Size                       16777216 No
Maximum SGA Size                 2147483648 No
Startup overhead in Shared Pool   335544320 No
Free SGA Memory Available                 0

Internal SGA overhead 크기가 10G부터 shared pool size에 포함되었으며 자동 memory 관리 기능 사용하지 않고 수동 크기 설정 시 최소한 overhead 크기보다는 커야 합니다.

그렇지 않으면 startup 시 ORA-00371에러가 발생하며 startup 실패 합니다. 첨부파일 Metalink Doc ID 351018.1 : “Minimum for SHARED POOL SIZE.docx” 참조.

[ORA-00371] 00371, 00000, "not enough shared pool memory, should be atleast %s bytes" Cause: Init.ora parameter shared_pool_size is too small Action: Increase the parameter value

1.2.2 SGA 변경 이력 정보 조회[편집]

1.2.2.1 V$SGA_RESIZE_OPS[편집]

SGA 메모리 변경이력을 확인하여 최대로 증가한 값을 기준으로 수동 세팅 설정
- SHRINK : 감소
- GROW   : 증가

SELECT COMPONENT
     , OPER_TYPE
     , FINAL_SIZE/1024/1024/1024 FINAL_SIZE_GB
     , TO_CHAR(START_TIME,'YYYYMMDD HH24:MI:SS') STARTED
  FROM V$SGA_RESIZE_OPS
 WHERE STATUS='COMPLETE'
 ORDER BY STARTED DESC, COMPONENT;

1.2.2.2 V$MEMORY_RESIZE_OPS[편집]

SGA TARGET,PGA TARGET 증가/감소 이력 조회
SELECT COMPONENT
     , OPER_TYPE
     , OPER_MODE
     , PARAMETER
     , ROUND(INITIAL_SIZE/1024/1024/1024,2) INITIAL_SIZE_GB
     , ROUND(TARGET_SIZE/1024/1024/1024 ,2) TARGET_SIZE_GB
     , ROUND(FINAL_SIZE/1024/1024/1024,2) FINAL_SIZE_GB
     , START_TIME
     , END_TIME
     , CON_ID 
  FROM V$MEMORY_RESIZE_OPS
ORDER BY start_time , component;

1.2.3 SGA 변경[편집]

◈ 10g 의 경우 SGA_TARGET 파라미터를 설정하면 나머지 값들을 적절하게 자동으로 설정해줌 (ASMM)

SQL> alter database set sga_target=6000M scope=both;

◈ ASMM 미사용시

[SGA Size 산정] DB_CACHE_SIZE + DB_KEEP_CACHE_SIZE + DB_RECYCLE_CACHE_SIZE + DB_nk_CACHE_SIZE+ SHARED_POOL_SIZE + LARGE_POOL_SIZE + JAVA_POOL_SIZE + LOG_BUFFER + 1MB

※ 대상 초기화파라미터는 SHARED_POOL_SIZE, LARGE_POOL_SIZE, JAVA_POOL_SIZE, DB_CACHE_SIZE, STREAMS_POOL_SIZE 가 있다.

sga_target = 0 => ASMM 를 사용하지 않겠다는 의미

SQL> alter system set LARGE_POOL_SIZE='32M' SCOPE=spfile;
SQL> alter system set JAVA_POOL_SIZE='50M' SCOPE=spfile;
SQL> ALTER SYSTEM SET DB_CACHE_SIZE=2000M;
SQL> ALTER SYSTEM SET SHARED_POOL_SIZE=500M;


1.2.4 현재 SGA SIZE 확인[편집]

select * from v$sga;

NAME                      VALUE
-------------------- ----------
Fixed Size               744168 ==> 백그라운드 프로세스 액세스 하는 영역
Variable Size         520093696 ==> SHARED_POOL_SIZE, LARGE_POOL_SIZE, JAVA_POOL_SIZE
Database Buffers     2147483648 ==> DB_CACHE_SIZE
Redo Buffers            1323008 ==> Redo Log Buffer
select * from v$sgainfo;



SGA 영역 확인 (parameter)

SELECT NAME
     , DISPLAY_VALUE
  FROM V$PARAMETER
 WHERE NAME IN (
              'pga_aggregate_target'
            , 'db_cache_size'
            , 'shared_pool_size'
            , 'shared_pool_reserved_size'
            , 'log_buffer'
            , 'java_pool_size'
            , 'large_pool_size'
            , 'sga_max_size'
 );

2 PGA 확인/변경[편집]

PGA ==> User 의 개인 사물함 (메모리 영역) : Sorting(정렬), 커서상태, Hash Join에 이용

 - Sort-based operators, such as ORDER BY, GROUP BY, ROLLUP, and window functions
 - Hash-join
 - Bitmap merge
 - Bitmap create
 - Write buffers used by bulk load operations


== PGA SIZE 권장 사항 및 설정 방법

SQL> show parameter pga

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target                 big integer 1073741824
SELECT NAME
     , DISPLAY_VALUE
  FROM V$PARAMETER
 WHERE NAME IN (
              'pga_aggregate_target'
 );

2.1 PGA_AGGREGATE_TARGET 설정 샘플[편집]

- For OLTP: PGA_AGGREGATE_TARGET = (total_mem * 80%) * 20% - For DSS: PGA_AGGREGATE_TARGET = (total_mem * 80%) * 50%

ALTER SYSTEM SET PGA_AGGREGATE_TARGET=655M SCOPE=BOTH;