글
Oracle Background Process
백그라운드 프로세스?
-오라클 서버가 시작되면 자동으로 시작되어 운영과 유지를 담당하는 프로세스
서버시작 -> 시작
서버종료 -> 종료
그림 출처 : https://docs.oracle.com/cd/B19306_01/server.102/b14220/process.htm
필수 백그라운드 프로세스
1. DBWR (Database Writer)
더티블락을 데이터파일로 저장하는 역할.
버퍼캐시의 더티버퍼 내용을 데이터파일에 내려쓰는 경우는 아래와 같음
1) Checkpoint 신호 발생 시
2) 더티버퍼가 임계값을 지났을 때
3) Time out 발생 시
4) RAC ping 발생 시
5) Tablespace가 Read only 상태로 변경 시
6) Tablespace가 offline 될 때
7) Tablespace가 begin backup 상태가 될 떄
8) Drop table 이나 Truncate table 될 떄
9) Direct Path Read/Write 가 진행될 때
10) 일부 Parallel Query 작업 시
※ DBWn (0~9) / dbw 땡
2. LGWR(Log Writer)
데이터가 변경되면 서버프로세스가 변경 내역(Change Vector)을 리두 로그 버퍼에 기록.
LGWR은 리두 로그 버퍼에 있는 내용을 리두 로그 파일로 저장.
1) 커밋; 발생시
2) 1/3 찼을 때
3) 변경량이 1M 되었을 때
4) 3초마다
5) DBWR이 내려 쓰기 전에
★ Commit 수행하면 디스크로 데이터를 내려쓴다. 라는 건 사실 Commit을 수행하면 저장을
하긴 하지만 데이터를 저장하는 것이 아니라 리두 로그를 저장하는 것이다.
3. PMON(Process Monitor)
모든 서버 프로세스 감시 및 비정상적으로 종료된 프로세스 관련 복구작업.
서버 프로세스에 문제가 생겼을 때 모든 작업을 rollback 하고 뒷처리 담당.
4. SMON(System Monitor)
Instance Crash 상태 (비정상 종료)의 경우 인스턴스를 시작할 때 Clean Up
Instance Recovery 라고 함.
ex)
A 입력
B 입력
commit;
C 입력
정전
이후 startup -> Instance recovery 과정
1) 파라미터 파일 읽은 후 nomount 단계에서 instance 생성
2) mount 단계에서 컨트롤파일 내용 확인 -> instance crash 상황 확인
3) Redo log file 에서 A입력 B입력 commit; C입력 단계를 다시 수행(Roll Forward) 커밋 안된 C입력까지 수행
4) DB 오픈
5) 커밋 안 된 C입력 작업 취소 (Roll Backward)
5. CKPT(Checkpoint Process)
DBWR에게 checkpoint 신호를 전달해주며 컨트롤파일과 데이터파일 헤더에 해당 체크포인트
정보를 기록하는 역할. 로그라이터와 디비라이터와 연관되어있음.
6.MMON , MMNL (Manageability Monitor Process - 10g 이후)
7. RECO(Recoverer Process)
분산 DB 환경에서 트랜잭션 처리도중 장애 발생 경우 해당 트랜잭션 자동 복구.
선택적 백그라운드 프로세스
1. ARCn (Archiver Processes)
2. CJQ0 & Jnnn (Job Queue Processes)
3. FBDA(FlashBack Data Archiver Process)
내용출처 : 오라클 관리실무(서진수)
'Oracle Admin' 카테고리의 다른 글
data file , redo log file , control file 이동 간단정리 (0) | 2015.04.02 |
---|---|
Tablespace 와 Data File 관리 (0) | 2015.04.01 |
pfile , spfile 생성 및 관리 (0) | 2015.03.30 |
SQL 문장의 실행원리 (0) | 2015.03.29 |
Oracle Architecture (0) | 2015.03.29 |
글
SQL 문장의 실행원리
1. 사용자가 SQL 문장 수행
2. 유저 프로세스가 SQL문 서버로 전달
ex) SQL developer , Toad , Orange ...
3. 서버쪽에서 작업을 수행하는 서버 프로세스에게 전달.
4. 유저프로세스는 결과가 나올때까지 기다림
전체적인 흐름
Parse(구문분석) -> Bind(값 치환) -> Execute(실행) -> Fetch(인출)
1) Parse (실행계획을 만들거나 찾는 단계. Shared Pool 메모리 공간 사용)
SELECT 문장을 예로들면
첫째, 문법검사
select , from , where
둘쨰, 의미검사
* , emp , empno=7900;
셋째, 권한검사
넷쨰, 실행계획 (파싱 하는 이유)
네비게이션과도 같은 역할을 하는 옵티마이져(계획 세워주는 역할)가 딕셔너리를 보고 작업을 한다.
Shared Pool
-Library Cache
-Dictionary Cache
Hard Parse : SQL과 실행계획을 캐시에서 찾지 못해 최적화 과정을 거치고 나서 실행단계로 넘어가는 경우
Sofr Parse : SQL과 실행계획을 캐시에서 찾아 곧바로 실행단계로 넘어가는 경우
2) Bind
사용자에게 정보를 받아 바꿔치기 하는 것.
ex) 회원 로그인 -> 아이디, 비번 받아서 바꿔치기
3) Execute
하드디스크의 데이터 파일에서 데이터가 들어있는 블락을 찾아 DB 버퍼캐시로 복사해 오는 과정.
작업을 위해서는 해당 테이블이 반드시 DB 버퍼캐시에 존재해야하는데 만약 존재하지 않으면
서버프로세스는 원하는 블락을 찾아 버퍼캐시로 복사 후 작업한다.
무조건 블락 단위로 움직인다. 원하는게 적든 많든 블락 단위로 퍼올려짐.
4) Fetch
블락단위로 올라온 데이터 중에 원하는 데이터만 골라내는 과정.
내용출처 : 오라클 관리실무 책(서진수)
'Oracle Admin' 카테고리의 다른 글
data file , redo log file , control file 이동 간단정리 (0) | 2015.04.02 |
---|---|
Tablespace 와 Data File 관리 (0) | 2015.04.01 |
pfile , spfile 생성 및 관리 (0) | 2015.03.30 |
Oracle Background Process (0) | 2015.03.29 |
Oracle Architecture (0) | 2015.03.29 |
글
Oracle Architecture
흔히 컴퓨터의 구성을 이야기 할 때
1. CPU
2. 작업을 하는 장소인 메모리(RAM)
3. 데이터를 저장하는 하드디스크(HDD)
이 세가지로 나눔.
컴퓨터와 오라클 모두 '메모리에서 작업하고 디스크에 저장한다' 는 원리가 중요.
오라클도 컴퓨터와 비슷하게 작업공간과 저장공간이 나뉘어져 있다.
1. 메모리 역할을 하는 INSTANCE
2. 데이터를 저장하는 DATABASE
<사진출처> ORACLE 계의 신성 꼬꼬마님 (http://blog.naver.com/chicken19)
그림으로 간단하게 살펴보면 위와같이 메모리부분, 저장공간부분으로 나뉘어져 있음.
System Global Area (SGA) 라고 하는 부분에서 실제 작업들이 수행되고 백그라운드 프로세스들은
오라클 서버(위의 구조를 Oracle Server 라고 함.) 가 잘 운영되도록 해주는 역할을 한다.
DB에 접속해서 startup 명령어를 치면
초기화 파라미터(pfile , spfile)에 적혀있는 설정을 참고하여 OS kernel에게 공유메모리 요청.
※파라미터 : SGA를 만들때 참조되는 설계도 같은 것.
메모리 요청을 받은 OS Kernel은 자신이 알고있는 OS Kernel 파라미터를 조회해서
그대로 메모리 할당.(리눅스: /etc/sysctl.conf 솔라리스: /etc/system 에서 OS 파라미터 조회)
★ SGA는 Oracle Server Process 가 요청하고 만들지만 만들어진 후에는 OS Kernel이 관리를 한다.
커널에게 SGA 생성을 요청한 오라클 서버 프로세스가 종료되어도 SGA는 종료되지 않고
인스턴스가 종료되어야 SGA가 공유메모리에서 사라진다.
SGA 의 각 구성요소 (빨간부분은 필수 구성요소)
1. Database Buffer Chache
데이터 조회, 변경 등의 실제 작업공간. 작업에 필요한 모든 데이터는 이곳에 있어야 한다.
만약 데이터가 없을 경우 데이터파일에서 해당 블록을 복사해 버퍼캐쉬로 가져와야 함.
버퍼캐쉬 블락의 상태 3가지
1) Pinned Buffer
다른 사용자가 사용하고 있는 블락. 식당으로 치면 현재 손님이 밥을 먹고있는 테이블.
2) Dirty Burffer
작업중은 아니지만 아직 변경된 작업내용을 저장하지 않은 버퍼.
저장이 안 된 상태에서 다른 사용자가 다시 덮어써서 사용한다면 이전 작업한 데이터가 문제가
되기 때문에 사용할 수 없다.
손님이 밥 다먹고 갔지만 테이블 안치움.
3) Free Buffer
애초에 사용이 되지 않았던 블락 또는 더티버퍼 였다가 하드디스크로 저장이 완료되어
재사용이 가능해진 블락.
테이블 치움.
※ 여기서 중요한 것은 저장의 유무이다.
※ 버퍼들의 상태를 관리하기 위해 LRU(Least Recently Used) List 만들어 관리.
가장 최근에 사용된 적이 있는 리스트. 많이 쓰이는 블락만 유지하도록.
LRU List (메인과 보조의 free 버퍼는 중복 안 됨)
-메인 리스트 : free, dirty 섞여있음
-보조 리스트 : free만
LRUW List
-메인 리스트 : dirty 버퍼만 모아놓은 것
-보조 리스트 : DBWR(디비라이터) 에 의해 기록중인 버퍼리스트
2. Redo Log Buffer (장부라고 생각하면 됨)
데이터가 변경될 경우 변경사항을 저장한다.
DDL , DML , TCL 같은 작업 내용.
※ SELECT 제외
3. Shaed Pool
다른 사용자와 어떤 대상을 공유해서 사용하기 위해 만들어진 곳
4. Large Pool
5. Java Pool
6. Streams Pool
10g 이상 버전부터.
7. Fixed Pool
백그라운드 프로세스들이 필요한 DB 전반적인 공유정보 , 프로세스들끼리 공유해야하는
Lock 정보 같은 것들이 저장
※ Dynamic SGA 기능
- 관리자 필요에 의해 SGA 구성요소의 크기 변경 후 인스턴스 재시작 없이 바로 적용할 수 있는 기능
PGA (Program Global Area) 의 주요 구성요소
SGA가 모든 프로세스들의 공유 메모리인 반면에
PGA는 각각의 서버 프로세스들이 개별적으로 사용하는 메모리 공간.
학교를 예로들면 공동으로 쓰는 운동장과 개별적으로 사용하는 사물함 개념.
주로 정렬관련 작업이 이루어진다.
그림출처 : https://docs.oracle.com/cd/E11882_01/server.112/e40540/memory.htm#CNCPT1237
1) Private SQL Area
사용자가 SQL 문장 수행 -> 유저 프로세스 -> 서버 프로세스 -> 작업을 요청한 유저 프로세스의
정보를 세션 메모리 부분에 저장한 후 SQL Parse 작업을 시작.
SQL에 Bind 변수 등이 있을 경우 Private SQL Area 에 보관. 임시로 정보를 저장할때도 사용.
2) SQL Work Area
Sort 관련 작업이나 Hash 관련 작업.
내용출처 : 강남 아이티윌 DB취업반 서진수샘 강의 및 오라클 관리실무 책(서진수)
'Oracle Admin' 카테고리의 다른 글
data file , redo log file , control file 이동 간단정리 (0) | 2015.04.02 |
---|---|
Tablespace 와 Data File 관리 (0) | 2015.04.01 |
pfile , spfile 생성 및 관리 (0) | 2015.03.30 |
Oracle Background Process (0) | 2015.03.29 |
SQL 문장의 실행원리 (0) | 2015.03.29 |