type: "" #애니메이션 효과
speed: 1000 # 슬라이드가 넘어가는 시간(ms)
ratio: 2 # 슬라이드 너비 : 슬라이드 높이 비율을 지정합니다.
full: false # 화면 꽉 차게 하기 ratio는 유지, 컬럼이나 토글안 일 시 옵션 동작 X
autoplay:
period: 0 # 슬라이드 자동 넘어가는 시간(0: 자동 재생 X)
indicator: # 슬라이드 위치 점
show: true
color: "#448161" # 위치 점 색
borderRadius: 0 # radius
backgroundColor: "transparent" # 슬라이드 배경화면 색상 배경 투명 ->"transparent"
Oracle Queuing Algorithm
기본적으로 Oracle은 Memory에서 LRU(Least Recently Used) List를 사용
사용 빈도가 높은 Buffer일수록 오래 DB Buffer Cache에 존재할 수 있는 Algorithm
LRU 보조 -> LRU 메인 -> LRUW 메인 -> LRUW 보조순으로 순환하며 버퍼를 탐색
LRU List
Dirty Buffer를 제외한 모든 Buffer를 관리
메인 리스트 : 사용된 버퍼들의 리스트가 hot, cold로 분류
보조 리스트 : 미사용된 버퍼나 DBWR에 의해 기록된 버퍼들의 리스트
LRUW List
같은 Data Block에 대한 DB Buffer Cache에 저장된 Buffer Image와 Data File에 저장되어 있는
물리적인 Block Image가 서로 다른 Buffer들을 관리하는 List
메인 리스트 : 변경된 버퍼들의 리스트
보조 리스트 : DBWR에 의해 기록중인 버퍼들의 리스트
Oracle Instance
Oracle Instance = SGA + Background Process
SGA(System Global Area)
SGA는 간단하게 오라클서버의 메모리영역
SGA는 Oracle의 인스턴스에 대한 데이터와 제어 정보를 가지는 공유 메모리 영역의 집합
목적의 따라 오라클 파라미터 파일(init.ora)의 조정으로 SGA의 각 부분의 크기를 조절 가능
Oracle9i부터 오라클 서버의 종료 없이 SGA의 구성을 SGA_MAX_SIZE 파라미터 값 범위 내에서만 각각의 크기를 동적으로 변경 가능
Oracle 서버를 동시에 사용하고 있는 사용자는 시스템 글로벌 영역의 데이터 공유
전체 SGA를 실제 메모리 크기가 허용하는 범위에서 가장 크게 잡으면 디스크 I/O를 줄이고 메모리에 가능한 많은 데이터를 저장할 수 있으므로 최적의 성능을 낼 수 있음
SGA는 공유 풀(Shared Pool), 데이터베이스 버퍼 캐시(DataBase Buffer Cache), 리두로그 버퍼(Redo Log Buffer) 이 세가지 와 LARGE POOL과 JAVA POOL, Streams Pool로 구성되어 있음
Shared Pool
Library Cache와 데이터 사전 캐시(Data Dictionary Cache)로 구성
하나의 데이터베이스에 실행되는 모든 SQL 문을 처리하기 위해 사용
문장 실행을 위해 그 문장과 관련된 실행 계획과 구문 분석 정보가 포함됨
사이즈는 SHARED_POOL_SIZE 파라미터 값으로 결정
Library Cache
가장 최근에 사용된 SQL 문장의 명령문, 구문 분석 트리, 실행 계획 정보를 가짐
LRU 알고리즘으로 관리
Shared SQL과 Shared PL/SQL 영역으로 구분
Shared SQL 영역: SQL문장에 대한 실행계획과 파싱 트리를 저장하고 공유
동일한 문장이 다시 실행되면 Shared SQL 영역에 저장되어 있는 실행 계획과 파싱 트리를 그대로 이용하기에 SQL 문장 처리 속도 향상
Shared PL/SQL 영역: 가장 최근에 실행한 PL/SQL 문장을 저장하고 공유
파싱 및 컴파일 된 프로그램 및 프로시져(함수, 패키지, 트리거)가 저장
Data Dictionary Cache
테이블, 컬럼, 사용자 이름, 사용 권한 같은 가장 최근에 사용된 데이터 사전의 정보를 저장
구문 분석 단계에서 서버 프로세스는 SQL문에 지정된 오브젝트 이름을 찾아내고 접근 권한을 검증하기 위해 Dictionary Cache의 정보를 찾음
DataBase Buffer Cache
가장 최근에 사용된 데이터를 저장하는 메모리 공간
디스크에 완전히 쓰여지지 않는 수정된 데이터를 보유할 수도 있음
DB Buffer Cache에서 찾고 있으면 반환: Logical Read
DB Buffer Cache에 없어서 Free Buffer를 확보 후 Disk에서 찾아 Cache하여 반환: Physical Read
LRU 알고리즘에 의하여 가장 오래전에 사용된 것은 Disk에 저장, Memory에는 가장 최근에 사용된 데이터를 저장함으로, Disk I/O이 줄어들고, DBS의 성능이 증가
LRU List: Buffer Block들의 상태를 관리하는 list
많은 사용자가 동시에 Physical Read를 하여 동시에 DB Buffer Cache의 Free Buffer를 찾으려 할 때 LRU List 참조
동시성 관리를 위해 순번 제공(Latch)
본인 순번이 올 때까지 대기
Buffer Status
Free: 사용해도 되는 Buffer
Clean: Buffer의 Data와 DB File 내의 Data가 일치하는 상태
Pinned: 현재 사용중인 Buffer, 누군가 읽거나 변경하고 있는 상태
Dirty: Buffer의 Data와 DB File 내의 Data가 일치하지 않는 상태
~Oracle 8i: DB_BLOCK_SIZE와 DB_BLOCK_BUFFERS를 곱해 DB Buffer Cache의 크기를 결정
Oracle 9i~: DB_BLOCK_BUFFERS를 Deprecated 시키고, DB_CACHE_SIZE 라는 파라미터가 도입
DB_BLOCK_SIZE: DB Buffer Cache의 블록 크기
오라클 9i에 변경된 Database Buffer Cache Parameter
Deprecated Buffer Cache Parameters
DB_BLOCK_BUFFERS
BUFFER_POOL_KEEP
BUFFER_POOL_RECYCLE
위 세 가지 파라미터는 예전 버전과의 호환을 위해 존재
Oralce 9i부터는 의미가 없어짐
Oracle 9i는 위의 파라미터들이 정의되어 있으면 위에 값들을 사용
Oracle 9i에 생성된 새로운 파라미터들을 사용하는 것이 좋음
DB_BLOCK_BUFFERS, BUFFER_POOL_KEEP, BUFFER_POOL_RECYCLE 값들을 사용시 Oracle 9i의 새기능인 Dynamic SGA 특징을 사용할 수 없음
initSID.ora 파일에 위 파라미터들과 새로운 파라미터를 동시에 기술시 에러 발생
New Buffer Cache Sizing Parameters
세 가지 파라미터 추가
DB_CACHE_SIZE: 디폴트 버퍼 캐시, 반드시 존재해야 하며, 0으로 설정할 수 없음
DB_KEEP_CACHE_SIZE: Keep Buffer Cache의 크기, 재활용 가능성이 높은 블록을 저장하는데 사용
DB_RECYCLE_CACHE_SIZE: 재활용 버퍼 캐시 크기, 재활용 가능성이 낮은 블록을 즉시 제거하는데 사용
다른 점: 이전 버전의 경우 DB_BLOCK_BUFFERS, BUFFER_POOL_KEEP, BUFFER_POOL_RECYCLE에 정의된 값들이 BUFFER 개수
이제는 구체적인 메모리 크기를 지정함
Oracle 9i부터는 Multiple Block Size(2K, 4K, 8K, 16K, 32K)를 지원
DB_BLOCK_SIZE에 의해 정해진 BLOCK SIZE가 기본 BLOCK SIZE가 됨
SYSTEM TABLESPACE는 이 BLOCK SIZE를 이용
-- ALTER SYSTEM 명령으로 동적 변경 가능
ALTER SYSTEM SET DB_CACHE_SIZE=96M;
ALTER SYSTEM SET DB_KEEP_CACHE_SIZE=16M;
ALTER SYSTEM SET DB_RECYCLE_CACHE_SIZE=16M;
Redo Log Buffer
데이터베이스에서 일어난 모든 변화를 저장하는 메모리 공간
장애 발생 시 Recovery를 위함
Redo Log Buffer에 기록되지 않는 경우
Direct Load
table이나 index의 nologging 옵션인 경우
table nologging 시 DML의 경우 제한적으로 Redo Log에 기록
DB에서 발생한 모든 변화는 LGWR에 의해 리두 로그 파일에 저장
Redo Log Buffer는 Database의 변경 사항 정보를 유지하는 SGA에 있는 Circular(순환) 버퍼
Redo Log Buffer의 크기는 Oracle Parameter LOG_BUFFER에서 지정
Java Pool & Large Pool & Streams Pool
Java Pool
자바로 작성된 프로그램을 실행할 때 실행 계획을 저장하는 영역
JAVA_POOL_SIZE 파라미터로 관리되며, 기본 크기 24MB로 할당
Large Pool
Oracle 백업 및 복원 작업에 대한 대용량 메모리 할당, I/O 서버 프로세스 및 다중 스레드 서버, Oracle XA에 대한 세션 메모리를 제공하는 SGA의 선택적인 영역
LARGE_POOL_SIZE 파라미터로 관리되며, 기본 크기는 0 byte
Streams Pool
Oracle Streams 전용으로 사용되며 버퍼링된 Queue Message를 저장하고 Oracle Streams 캡처 Process 및 적용 Process에 대해 메모리를 제공하는 선택적인 영역
STREAMS_POOL_SIZE 파라미터로 관리되며, 기본 크기는 0 byte
Oracle 필수 Background Process
Oracle DB가 시작되기 위해 꼭 필요하며 DB 종료 시 모두 종료됨
SMON(System MONitor)
Oracle Instance를 관리
Instance Recovery 수행
Startup 중 싱크 정보를 확인해 어긋날 경우 Redo Log Entires를 재실행 하여 서버의 싱크를 맞추는 과정
인스턴스 복구는 저장되는 것까지 고려해야함
DB 비정상 종료
STARTUP
MOUNT 단계에서 Data File의 SCN번호가 일치하지 않음 확인
Roll Forward
Redo Log File의 정보를 Data File에 적용
OPEN 단계에서 Roll Back
Undo Tablespace의 Undo Data를 사용해 Commit 되지 않은 내용 Roll Back
데이터 파일의 빈 공간을 연결해 하나의 큰 빈공간으로 만듬
더 이상 사용하지 않는 임시 세그먼트 제거 → 재사용 가능
오라클 인스턴스 fail시 복구하는 역할
PMON(Process MONitor)
오라클 서버에서 사용되는 각 프로세스들을 감시
비정상 종료된 DB 접속을 정리
정상적으로 작동하지 않는 프로세스를 감시해 종료, 비정상적 종료된 프로세스들에게 할당된 SGA 리소스를 재사용 가능하게 만듬
커밋되지 않은 트랜잭션을 ROLLBACK시킴
DBWn(DataBase WRiter)
DB Buffer Cache에 있는 Dirty Block의 내용을 데이터 파일에 기록
DB Buffer Cache내의 충분한 수의 Free Buffer가 사용 가능해짐
LRU 알고리즘을 사용
n은 숫자로 DB Writer를 여러개 구성 가능
Default 1 or CPU_CONT/8 중 큰 쪽 1~100
DB_WRITER_PROCESSES Parameter를 통해 설정 가능
처음 36개의 DB Writer Process의 이름은 DBW0-DBW9 및 DBWa-DBWz,
37~100번째 DB Writer Process의 이름은 BW36-BW99
보통은 DBW0으로 충분하나 시스템에서 데이터를 많이 수정할 때 추가 Process를 구성 가능
uniprocessor system(단일 프로세서 시스템)에서는 사용하지 않음
발생하는 이벤트
Dirty Buffer 수가 임계값 도달
프로세스가 지정된 개수의 블록을 스캔 하고도 Free Buffer를 발견하지 못했을 때
시간 초과
CKPT가 발생 시
RAC ping이 요청되었을 때
Tablespace가 offline이나 read only로 변경되었을 때
TABLESPACE BEGIN BACKUP 명령 실행했을 때
LGWR(LoG WRiter)
DB Buffer Cache의 모든 변화를 기록
SGA의 Redo Log Buffer에 생겨나며 트랜잭션이 완료되었을 때 Redo Log Buffer의 내용을 Online Redo Log File에 기록
CKPT(ChecK PoinT)
모든 변경된 DB Buffer를 디스크 내의 데이터 파일로 저장하는 것을 보장
변화된 데이터 블록 수, 일정 간격을 둬 DBWn이 Dirty Buffer를 데이터 파일로 저장하도록 명령
발생시 데이터 파일과 컨트롤 파일의 헤더를 갱신
관련 오라클 파라미터
LOG_CHECKPOINT_TIMEOUT: CKPT가 발생할 시간 간격 설정(단위: Sec)
LOC_CHECKPOINT_INTERVAL: CKPT가 발생할 Redo Log File의 블록 수 지정