행위

SGA 와 PGA

DB CAFE

Dbcafe (토론 | 기여)님의 2018년 10월 21일 (일) 09:16 판 (새 문서: SGA ,PGA 설정 확인 및 변경 jehong 2010.12.01 12:18 댓글수0 공감수 0 =========================================================== SGA 설정 확인 및 변경 ===========...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)
thumb_up 추천메뉴 바로가기


SGA ,PGA 설정 확인 및 변경 jehong 2010.12.01 12:18 댓글수0 공감수 0


1 ===============================================[편집]

SGA 설정 확인 및 변경

2 ===============================================[편집]
3 ========================[편집]

ASMM

4 ========================[편집]

REDO LOG BUFFER 를 제외하고 대부분 자동 조절함.

Memory 관련 Parameter 를 0로 설정 후 SGA_TARGET 파라미터에 총 SIZE 설정 하면 됨.

ex) shared_pool_size = 0 으로 설정 시 최소 값으로 설정함. sga_target = 0 하면 AASM 를 사용하지 않겠다는 의미

조심할 것 : sga_target 설정 시 REDO LOG BUUFER SIZE 는 항상 빼고 셋팅 할 것

sga_target = 8G ==> 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

수동으로 만일 설정 시 야간에 백업 작업이 많으면 LARGE_POOL_SIZE 조절 해줘야 하는데, ASMM 사용 시 자동으로 설정 되므로 야간 작업 안해도 됨..ㅎㅎ

ASMM 설정 방법 1. 위와 같이 다른 파라미터 0 으로 설정 2. sga_target 설정

sga_max_size 는 redo log buffer size 까지 포함됨.



5 =================[편집]

특징

6 =================[편집]

- 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 단위로 늘어나거나 줄어들 수 있습니다.


7 =================[편집]

SHOW SGA 정보

8 =================[편집]

※ DB Startup SGA 정보 설명

  ORACLE instance start 시점에 SGA 정보가 출력
  이때 출력되는 SGA 정보는 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 파라미터로부터 영향


16:37:56 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


9 =================[편집]

SGA 변경

10 =================[편집]

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

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


◈ 9i의 경우 아래와 같이 설정

[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 하면 AASM 를 사용하지 않겠다는 의미


11 ======================[편집]

9i JAVA_POOL_SIZE, LARGE_POOL_SIZE

12 ======================[편집]

새로운 파라미터 값 지정 시, single quote를 지정한다.

SQL> alter system set LARGE_POOL_SIZE='32M' SCOPE=spfile; System altered.

SQL> alter system set JAVA_POOL_SIZE='50M' SCOPE=spfile; System altered.


1. LARGE_POOL_SIZE 와 JAVA_POOL_SIZE 파라미터는 Oracle 9i에서 static parameter 이다. 이 두 파라미터는 오직 SPFILE scope 내에서만 변경될 수 있다.

2. LARGE_POOL_SIZE 와 JAVA_POOL_SIZE 파라미터에 저장되는 값은 NUMERIC 값이 아니라, STRING 값이다. 따라서, SPFILE scope 내에서 이 파라미터 값들을 변경하기 위해서는 character string으로 값을 명시해야 한다.



[현재 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


SQL> ALTER SYSTEM SET DB_CACHE_SIZE=2000M; SQL> ALTER SYSTEM SET SHARED_POOL_SIZE=500M;


13 =================[편집]

SGA 영역 확인 (parameter)

14 =================[편집]

SQL> show parameter SGA_MAX_SIZE

NAME TYPE VALUE


----------- ------------------------------

sga_max_size big integer 2669644520


SQL> show parameter SHARED_POOL_SIZE

NAME TYPE VALUE


----------- ------------------------------

shared_pool_size big integer 318767104


SQL> show parameter DB_CACHE_SIZE

NAME TYPE VALUE


----------- ------------------------------

db_cache_size big integer 2147483648


SQL> show parameter JAVA_POOL_SIZE

NAME TYPE VALUE


----------- ------------------------------

java_pool_size big integer 117440512

SQL> show parameter LARGE_POOL_SIZE

NAME TYPE VALUE


----------- ------------------------------

large_pool_size big integer 16777216


SQL> show parameter LOG_BUFFER

NAME TYPE VALUE


----------- ------------------------------

log_buffer integer 1048576


15 =================[편집]

PGA

16 =================[편집]

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

       - 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


17 ===================[편집]

PGA SIZE 권장 사항 및 설정 방법

18 ===================[편집]

SQL> show parameter pga

NAME TYPE VALUE


----------- ------------------------------

pga_aggregate_target big integer 1073741824


  1. PGA_AGGREGATE_TARGET

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

where total_mem is the total amount of physical memory available on the system.

In this example, with a value of total_mem equal to 4 GB, you can initially set PGA_AGGREGATE_TARGET to 1600 MB for a DSS system and to 655 MB for an OLTP system. pga_aggregate_target [root@smdb ~]# grep MemTotal /proc/meminfo MemTotal: 3865908 kB 618M

ALTER SYSTEM SET PGA_AGGREGATE_TARGET=655M SCOPE=BOTH;