251128 TIL

2025. 11. 28. 19:15Courses/아이티윌 오라클 DBA 과정

SGA

Shared Pool

  • 다양한 유형의 프로그램 데이터를 캐시하는 메모리
  • library cache : 유저들이 수행한 SQL문, PL/SQL문에 대한 정보를 저장, 실행계획을 가지고 있는 메모리
  • data dictionary cache(row cache) : data dictionary table의 정보를 가지고 있는 메모리
    • Semantic Check
    • 하드 파싱 시 통계 정보 조회
      • 하드 파싱 : 메모리, CPU를 사용하여 실행 계획 생성
      • 통계 정보는 data dictionary table에 존재(tab$, col$, ind$)
  • shared_pool_size 파라미터를 이용해서 크기 지정
    • 동적으로 크기 조정 가능
SYS@ora19c> show parameter shared_pool_size

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
shared_pool_size                     big integer 0
select * from v$parameter where name = 'shared_pool_size';
select sum(bytes)/1024/1024 mb from v$sgastat where pool = 'shared pool';
select * from v$sga_dynamic_components;

Dababase Buffer Cache, Data Buffer Cache

  • 데이터 파일에서 읽은 데이터 블록의 복사본을 저장하는 메모리 영역
  • 물리적 I/O 를 최소화하기 위해 최근에 사용된 블록(block)을 저장하는 메모리 영역
  • Data Buffer Cache 내부 구성 요소
    • db_cache_size (필수 구성)
    • db_recycle_cache_size (옵션 구성)
    • db_keep_cache_size (옵션 구성)
    • db_nk_cache_size (옵션 구성) : nk(2k, 4k, 8k, 16k, 32k)
select * from v$parameter where name like '%cache_size%';

REDO LOG BUFFER

  • 데이터베이스 데이터 블록의 모든 변경 사항을 기록
  • 기본 목적은 복구(recovery)
  • 내부에 기록된 변경 사항을 REDO Entry라고 함
  • REDO Entry에는 변경 사항을 재구성하거나 재실행할 정보가 포함됨
  • REDO Entry가 생성되는 SQL문 : DML(insert, update, delete, merge), DDL(create, alter, drop), select for update 문
    • truncate 문 자체는 redo entry로 만들어지지 않음
    • 딕셔너리 테이블 변경에 대해서만 REDO entry 생성됨
  • log_buffer 파라미터를 이용해서 설정
    • static parameter
select * from v$parameter where name = 'log_buffer';

SYS@ora19c> show parameter log_buffer

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_buffer                           big integer 7352K

Large Pool

  • 다음 용도의 데이터를 메모리에 저장하는 데 사용
    • RMAN을 이용해서 백업 및 복구 작업 수행
    • Oracle Shared Server 환경일 때 UGA(User Global Area)가 생성됨
    • parallel query(병렬 쿼리) 작업 수행
  • large_pool_size 파라미터를 이용해서 크기 설정
    • 동적 파라미터
select * from v$parameter where name = 'large_pool_size';

SYS@ora19c> show parameter large_pool_size

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
large_pool_size                      big integer 0

Java Pool

  • JVM 내의 모든 세션 별 JAVA 코드 및 데이터를 메모리에 저장하는 데 사용
  • java_pool_size 파라미터를 이용해서 크기 설정
    • 동적 파라미터
select * from v$parameter where name = 'java_pool_size';

SYS@ora19c> show parameter java_pool_size

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
java_pool_size                       big integer 0

Streams Pool

  • 하나의 데이터베이스에서 다른 데이터베이스로 데이터를 이동, 복제하는 stream process에 필요한 buffer queue message를 사용하는 메모리
  • streams_pool_size 파라미터를 이용해서 크기 설정
    • 동적 파라미터
select * from v$parameter where name = 'streams_pool_size';

SYS@ora19c> show parameter streams_pool_size

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
streams_pool_size                    big integer 0

백그라운드 프로세스

https://docs.oracle.com/en/database/oracle/oracle-database/19/cncpt/process-architecture.html#GUID-85D9852E-5BF1-4AC0-9E5A-49F0570DBD7A

 

Database Concepts

This chapter discusses the processes in an Oracle database.

docs.oracle.com

DBWn(Database Writer)

  • Data Buffer Cache에 수정된 (Dirty Block) buffer를 데이터 파일에 기록하는 백그라운드 프로세스
  • 작동 시점
    • data buffer cache에서 free buffer를 찾지 못했을 경우(free buffer waits 이벤트 발생)
    • checkpoint 이벤트가 발생할 때
SYS@ora19c> show parameter db_writer_processes

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_writer_processes                  integer     1

SYS@ora19c> ! ps -ef | grep ora_dbw
oracle    3991     1  0 Nov26 ?        00:00:03 ora_dbw0_ora19c

LGWR(Log Writer)

  • REDO Log Buffer에 있는 Redo Entry를 REDO Log File에 기록하는 백그라운드 프로세스
  • 작동 시점
    • commit, rollback 수행
    • redo log buffer가 1/3 찼을 경우
    • 1MB 이상의 REDO Entry가 들어온 경우
    • 3초마다
    • DBWR가 기록하기 전에
  • Instance Rcovery 시 SMON이 REDO Log를 통해 자동 복구
  • Media Recovery 시 REDO Log를 가지고 복구
SYS@ora19c> ! ps -ef | grep lgwr
oracle    3993     1  0 Nov26 ?        00:00:02 ora_lgwr_ora19c
-- 로그 정보 : 컨트롤 파일이 가지고 있음
-- status가 CURRENT 인 그룹에 해당하는 파일에 로그 작성(redo03.log)
select * from v$log;
select * from v$logfile;

'Courses > 아이티윌 오라클 DBA 과정' 카테고리의 다른 글

251202 TIL  (0) 2025.12.02
251201 TIL  (0) 2025.12.01
251127 TIL  (0) 2025.11.27
251126 TIL  (0) 2025.11.26
251125 TIL  (1) 2025.11.25