내맘대로긍정이 알려주는
Oracle 23ai 신기능
무료 세미나 발표자료
OS환경 : Oracle Linux 6.8 (64bit), Oracle Linux 7.3 (64bit)
DB 환경 : Oracle Database 11.2.0.4, 19.3.0.0
방법 : 오라클 메모리 관련 정리
오라클에서 사용하는 메모리에 대해 간략하게 정리함
SGA(System Global Area) - 모든 사용자가 공유 가능하여 사용
PGA(Program Global Area) - 사용자마다 공유하지 않고 개별적으로 사용
Shared Pool : 공유 커서, 공유 프로시저, 고정 오브젝트, 딕셔너리 캐시와 수십개의 많은 데이터들을 포함하고 있음
온라인 상태에서도 크기를 조정할 수 있음
Large Pool : shared server 커넥션 환경에서 세션별로 할당할 메모리를 위해 활용 되는데, 메시지 버퍼를 위한 병렬 실행 기능, 디스크 I/O버퍼를 위한 RMAN백업 등에 활용됨, 온라인 상태에서도 크기를 조정할 수 있음
Java Pool : 데이터베이스에서 JVM이 실행되는 동안 할당하는 고정된 메모리 공간을 뜻함
오라클 10g부터 java pool은 온라인 상태에서도 크기를 조정할 수 있음
Streams Pool : 오라클 스트림이 독점적으로 사용하고 있는 메모리임, 오라클 10g에서 새롭게 선보인 pool이며,
온라인 상태에서도 크기를 조정할 수 있음
buffer cache : 데이터 파일에서 읽은 데이터 블록 복사본을 보관함, 오라클이 데이터를 읽고 수정하기 위해 디스크에 존재하는 데이터를 읽어 저장하는 메모리 공간
ASSM (Automatic Shared Memory Management)
Oracle 9i부터 지원된 프리블록 관리방법을 말함
FLM(Free List Management)방식과 달리 비트맵을 이용하여 프리블록을 관리함
PCTUSED, FREELISTS, FREELIST GROUP항목들이 자동관리됨
sga_target 설정을 0으로 하면 ASSM(Automatic Shared Memory Management)라 불리는 자동 공유 메모리 관리 메커니즘이 꺼진다. 즉 0보다 크게 잡아야 ASSM 기능을 사용할 수 있다. 예를 들어 sga_target을 4G로 설정하면 4G 안에서 알아서 사용하라는 의미가 된다.
ASMM을 사용하기 위한 조건
STATISTICS_LEVEL Parameter 값이 typical 또는 ALL 로 설정
SGA_TARGET Parameter 값을 0 보다 큰 값으로 설정(0은 사용하지 않음을 의미)
SGA_MAX_SIZE : ASMM에서 사용할 최대값을 지정함
SGA_TARGET : 이 값에서 ASMM이 이루어지게됨 SGA_MAX_SIZE와 SGA_TARGET은 동일한 값으로 설정하길 권장함
SGA 구성요소(shared_pool, large pool, DB Buffer Cache 등)들의 값은 0으로 설정(0 이상의 값이 설정되어 있다면 그 값을 최소값으로 인식하기 때문에 0으로 설정하기를 권장)
AMM(Auto Memory Management)
Oracle은 9i부터는 PGA를 WORKAREA_SIZE_POLICY, PGA_AGGREGATE_TARGET 등의 Parameter를 이용하여 자동으로 관리하는 방식을 써옴
10g에서도 마찬가지로 SGA는 ASMM방식 + PGA는 WORKAREA_SIZE_POLICY, PGA_AGGREGATE_TARGET 을 이용하여 관리가 됨
11g에서 등장한 AMM 관리 기법은 SGA+PGA를 자동으로 관리하는 방식으로 발전함
AMM 관리 기법이 등장하면서 아래 2가지 Parameter가 생김
MEMORY_TARGET : AMM 기능 사용시 사용할 수 있는 Memory의 총량을 정할 수 있음
이 Parameter가 0이면 AMM을 사용하지 않는다는 뜻이며, 최대 설정 값은 MEMORY_MAX_TARGET의 값 까지 지정할 수 있음
MEMORY_MAX_TARGET : MEMORY_TARGET 값이 최대로 증가될 값을 지정
AMM 기능을 사용하게 된다면 SGA_TARGET, PGA_AGGREGATE_TARGET의 값을 0으로 지정하는 것이 좋음
ASMM과 마찬가지로 0이 아닌 경우 그 값을 최소값으로 인식하기 때문
show sga에서 나오는 결과
1 2 3 4 5 6 7 | SQL> show sga Total System Global Area 1553305600 bytes Fixed Size 2253544 bytes Variable Size 1174408472 bytes Database Buffers 369098752 bytes Redo Buffers 7544832 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 파라미터로부터 영향 받음
현재 PGA 메모리 사용량과 최대 메모리 사용량 조회
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | SQL> select program, pga_used_mem, pga_alloc_mem, pga_max_mem from v$process order by 1; PROGRAM PGA_USED_MEM PGA_ALLOC_MEM PGA_MAX_MEM ------------------------------------------------ ------------ ------------- ----------- PSEUDO 0 0 0 oracle@ORACLE10 (CJQ0) 652380 2421020 2421020 oracle@ORACLE10 (CKPT) 410476 568228 568228 oracle@ORACLE10 (DBW0) 388172 517988 517988 oracle@ORACLE10 (LGWR) 10902676 11643748 11660804 oracle@ORACLE10 (MMAN) 307092 389404 389404 oracle@ORACLE10 (MMNL) 312596 389404 389404 oracle@ORACLE10 (MMON) 1171212 2289948 2289948 oracle@ORACLE10 (PMON) 307892 389404 389404 oracle@ORACLE10 (PSP0) 307092 389404 389404 oracle@ORACLE10 (QMNC) 316244 389404 389404 oracle@ORACLE10 (RECO) 382740 651548 651548 oracle@ORACLE10 (SMON) 544180 1569052 1569052 oracle@ORACLE10 (TNS V1-V3) 329604 406492 406492 oracle@ORACLE10 (q000) 418468 520476 520476 oracle@ORACLE10 (q001) 337740 454940 454940 16 rows selected. |
컬럼 설명
PGA_USED_MEM : 프로세스가 현재 사용하는 PGA 크기
PGA_ALLOC_MEM : 프로세스에 할당된 PGA 크기
- 다른 프로세스에서 필요로 할 경우 PGA_USED_MEM 를 제외한 나머지 공간을 반환함
즉 PGA_ALLOC_MEM 만큼 할당되어 있지만 현재는 PGA_USED_MEM 만 사용중이고 남은 메모리는 반환되지 않았음을 의미)
PGA_MAX_MEM : 프로세스가 가장 많이 사용했을 때의 크기
PGA_USED_MEM 합(현재 DB에서 PGA 전체 사용량)
1 2 3 4 5 | SQL> select round(sum(pga_used_mem)/1024/1024, 1) as pga_used from v$process; PGA_USED ---------- 16.4 |
메모리 영역별 메모리 최소 할당량 확인(19c 결과값)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | SQL> set lines 200 col component for a40; col cur_size for a10; col min_size for a10; select component, round(current_size/1024/1024, 2)||'MB' as cur_size, round(min_size/1024/1024, 2)||'MB' as min_size from v$sga_dynamic_components --where component = 'ASM Buffer Cache' / COMPONENT CUR_SIZE MIN_SIZE ---------------------------------------- ---------- ---------- shared pool 596MB 596MB large pool 12MB 12MB java pool 0MB 0MB streams pool 0MB 0MB unified pga pool 0MB 0MB memoptimize buffer cache 0MB 0MB DEFAULT buffer cache 0MB 0MB KEEP buffer cache 0MB 0MB RECYCLE buffer cache 0MB 0MB DEFAULT 2K buffer cache 0MB 0MB DEFAULT 4K buffer cache 0MB 0MB DEFAULT 8K buffer cache 0MB 0MB DEFAULT 16K buffer cache 0MB 0MB DEFAULT 32K buffer cache 0MB 0MB Shared IO Pool 0MB 0MB Data Transfer Cache 0MB 0MB In-Memory Area 0MB 0MB In Memory RW Extension Area 0MB 0MB In Memory RO Extension Area 0MB 0MB ASM Buffer Cache 24MB 24MB |
COMPONENT 설명
Shared Pool : 공유 커서, 공유 프로시저, 고정 오브젝트, 딕셔너리 캐시와 수십개의 많은 데이터들을 포함하고 있음
온라인 상태에서도 크기를 조정할 수 있음
Large Pool : shared server 커넥션 환경에서 세션별로 할당할 메모리를 위해 활용 되는데, 메시지 버퍼를 위한 병렬 실행 기능, 디스크 I/O버퍼를 위한 RMAN백업 등에 활용됨, 온라인 상태에서도 크기를 조정할 수 있음
Java Pool : 데이터베이스에서 JVM이 실행되는 동안 할당하는 고정된 메모리 공간을 뜻함
오라클 10g부터 java pool은 온라인 상태에서도 크기를 조정할 수 있음
Streams Pool : 오라클 스트림이 독점적으로 사용하고 있는 메모리임, 오라클 10g에서 새롭게 선보인 pool이며,
온라인 상태에서도 크기를 조정할 수 있음
Default buffer cache : 일반적인 버퍼캐시 영역
(데이터 파일에서 읽은 데이터 블록 복사본을 보관함, 오라클이 데이터를 읽고 수정하기 위해 디스크에 존재하는 데이터를 읽어 저장하는 메모리 공간)
Keep buffer cache : 사용빈도가 높은 데이터를 위한 버퍼캐시, 이 곳에 읽혀진 블록은 긴 시간동안 메모리상에서 관리됨
Recycle buffer cache : 사용빈도가 낮은(데이터 제거 우선순위가 높은) 데이터가 저장되는 영역, 이곳에 위치하게 되는 블록은 짧은 시간동안 관리됨
Shared IO Pool : Oracle 11g부터 나옴, lob에 nocache가 사용되는 경우 SecureFile LOB 작업에 이 캐시를 사용함 ,NOCACHE 옵션을 사용하여 lob를 작성하는 경우 default임
이 pool의 메모리 크기가 SecureFile LOB 작업에 비해 너무 작은 경우 서버 프로세스는 충분한 공유 메모리를 다시 사용할 수 있을 때까지 PGA 메모리를 임시로 사용함
Data Transfer Cache : Oracle 12cR2에 나왔고 데이터 블록을받는데 사용되는 캐쉬임, Oracle Data Guard 환경의 기본 데이터베이스에서 사용함, 관련 파라미터 :DATA_TRANSFER_CACHE_SIZE
ASM Buffer Cache : 어떤 캐쉬인지 제대로 설명된 곳이 없음, ASM 미사용시 0으로 표시되고 ASM 사용시 grid 계정으로 접속하거나 ORACLE_HOME을 $GRID_HOME으로 설정하고, ORACLE_SID를 +ASM 으로한뒤 sqlplus / as sysdba 로 접속하면 해당 값을 볼수 있을 테스트 머신에선 24MB로 나왔음
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | $ export ORACLE_HOME=$GRID_HOME $ export ORACLE_SID=+ASM $ sqlplus / as sysdba SQL> set lines 200 col component for a40; col cur_size for a10; col min_size for a10; select component, round(current_size/1024/1024, 2)||'MB' as cur_size, round(min_size/1024/1024, 2)||'MB' as min_size from v$sga_dynamic_components where component = 'ASM Buffer Cache' / COMPONENT CUR_SIZE MIN_SIZE ---------------------------------------- ---------- ---------- ASM Buffer Cache 24MB 24MB |
오라클 10g에서 sga 메모리 파라미터 변경 방법
오라클 10g에서 sga 메모리 변경 방법(https://positivemh.tistory.com/492)
참조 :
https://tawool.tistory.com/263
http://wiki.gurubee.net/pages/viewpage.action?pageId=26740627
https://secmaster.tistory.com/11
https://community.oracle.com/thread/2845064
https://docs.oracle.com/cd/B28359_01/server.111/b28320/dynviews_3030.htm#REFRN30235
https://docs.oracle.com/database/121/REFRN/GUID-67465D05-C0D2-4646-B9F3-03F8D64E25E1.htm#REFRN00626
http://www.dba-oracle.com/t_11g_new_shared_io_pool.htm
http://www.koreaoug.org/c12/935
https://sarc.io/index.php/oracledatabase/591-2016-08-19-12-34-31
http://wiki.gurubee.net/pages/viewpage.action?pageId=10190866
http://haisins.epac.to/wordpress/?p=354
'ORACLE > Admin' 카테고리의 다른 글
오라클 audit 정리 및 테스트 (3) | 2020.02.01 |
---|---|
오라클 undo tablespace 재생성 (0) | 2020.02.01 |
오라클 10g에서 sga 메모리 및 프로세스 변경 방법 (2) | 2020.01.28 |
오라클 .bash_profile 설정 (0) | 2020.01.07 |
오라클 Table Compress 기능 중 oltp와 advanced 옵션 차이점 (0) | 2019.11.22 |