오라클 아키텍처(2) 프로세스

2018. 12. 17. 07:00

 

오라클 프로세스


오라클 프로세스 =

  유저 프로세스(User Porcess) + 

  오라클 데이터베이스 프로세스
  (서버 프로세스와 백그라운드 프로세스) + 

  오라클 Daemon 과 응용프로그램 프로세스
 

- 유저 프로세스 : 또는 클라이언트 프로세스. 유저가 오라클에 접속할 때 생성
- 서버 프로세스 : 유저 프로세스에서 발행한 명령 실행
- 백그라운드 프로세스 : 운영체제와 상호작용하며 메모리 구조 관리, I/O 비동기방식으로 수행, 기타 필요한 작업 수행






 

1. 유저 프로세스


- 유저가 응용프로그램(SQL*Plus 같은)을 실행할 때 유저의 응용 프로그램 의미

- 오라클 서버에서 로컬로 SQL*Plus를 실행시켜서 유저 프로세스를 오라클과 동일 시스템에 위치시킬 수도 있고, 외부에서 네트워크로 접속할 경우 유저 프로세스는 외부에 존재하게 됨

- 외부에서 네트워크로 접속할 경우 유저 프로세스는 먼저 리스너 프로세스와 통신하고,
리스너가 서버 프로세스와 연결시킴
 
 

2. 서버 프로세스


- 유저 프로세스의 요청을 처리하는 프로세스

- 하는 일
  . 응용 프로그램을 통해 발행된 SQL문 구문 분석
  . 필요한 데이터 블록을 디스크에서 SAG 공유 데이터베이스 버퍼로 읽어들임
  . 응용 프로그램에게 결과 반환
 
 

3. 백그라운드 프로세스


가. DBWn(데이터베이스 라이터 프로세스)
- 데이터베이스 버퍼 캐시의 수정된 버퍼(더티 버퍼)를 디스크에 기록
- 보통은 한 개의 DBW0 프로세스를 갖지만 쓰기 작업이 많다면 추가 프로세스를 구성할 수도 있음
(DB_WRITER_PROCESSES 초기화 파라미터에서 지정)

 
 
나. LGWR(Log Writer)
- 서버 프로세스는 데이터 변경 내역을 redo log buffer에 먼저 기록하고(log wirte ahead) 그 다음에 database buffer cache에 기록함
- LGWR은 redo log buffer의 내용을 아래 경우일 때 디스크의 redo log file로 기록
  . 유저 프로세스가 트렌젝션을 commit할 때
  . 리두 로그 버퍼가 1/3 찼을 때
  . 변경량이 1M 가 되면
  . 3초마다
  . DBWR이 내려쓰기 전에
 
- 만약 리두로그 그룹의 파일 중 하나가 손상되면 해당 그룹의 다른 파일을 사용하고 해당 내용을 alert 로그에 남긴다. (그룹의 모든 파일이 장애가 난다면 오라클 멈춤)
 
- 유저가 트랜젝션을 커밋하면 트랜잭션에 SCN이 할당되는데 이 번호를 트랜젝션의 리두 항목과 함께 리두 로그에 기록.
 
 
다. ckpt(chekpoint process)
- DBWR에게 체크포인트 신호를 주고, control file 과 datafile header에 해당 체크포인트 정보를 기록
 
 
라. SMON(System Monitor)
- 인스턴스가 비정상 종료 되었을 때 redo log file을 참고해서 clean up(Instance Recovery)
  (사용한 임시 세그먼트 정리, UNDO 세그먼트 관리)
 
* 주로 공간 정리 전문 프로세스
  
 
마.  PMON(Process Monitor)
- 서버 프로세스 모니터
- 유저 프로세스가 실패할 경우 프로세스 리커버리 수행
  (데이터 버퍼캐시 정리, 유저 프로세스의 리소스 해제)

* 메모리와 프로세스 청소 전문 프로세스
  서버 프로세스 비정상 종료시 메모리 정리, 내부 락 해제 등
  약 1분에 한번씩 동작
  
* 중요한 백그라운드 프로세스가 종료되었다면 PMON이 인스턴스를 강제 종료시킴
  
* 인스턴스 정보, 프로세스 수, 인스턴스 부하 등을 listener.ora에 등록하는 일 담당
  (초기화 파라미터에서 정한 수보다 많은 접속 시도가 일어나지 않도록 프로세스 숫자 정보를 PMON이 주기적으로 리스너에게 정보 전달) 
 
 
바. ARCR(Archiver Process)
- ARCHIVELOG 모드일 경우에만 동작
- 로그 스위치가 발생한 후 리두 로그 파일을 지정된 장치로 복사



 
사. MMON & MMNL
- AWR(자동 성능 통계)을 수집하고 기록하기 위한 프로세스
- 10g 이후 추가
 
 


* 오라클에 로컬에서 SYSDBA로도 접속조차 할 수 없는 장애 상황이 발생할 경우 SMON등의 주요 프로세스를 kill시키면 PMON이 인스턴스를 강제로 종료시킴





* 백그라운드 프로세스는 오라클이 알아서 갯수를 늘려서 작업하고, 불필요하면 프로세스 숫자를 줄이기도 하기 때문에 정확한 숫자를 이야기할 수 없음. 

10g와 11g를 거쳐서 점점 백그라운드 프로세스 숫자가 늘어난다고.. 

12c에서는 300개가 넘는다. 


1
2
3
4
5
6
7
8
9
10
SQL> select count(*from v$bgprocess;
 
  COUNT(*)
----------
       377
 
1 row selected.
 
Elapsed: 00:00:00.03
 
cs



주요 프로세스 조회(12C)


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
35
36
37
38
39
40
41
42
43
44
45
46
SQL> SELECT name, description from V$BGPROCESS;
 
NAME  DESCRIPTION
----- ----------------------------------------------------------------
PMON  process cleanup
VKTM  Virtual Keeper of TiMe process
GEN0  generic0
DIAG  diagnosibility process
OFSD  Oracle File Server BG
DBRM  DataBase Resource Manager
VKRM  Virtual sKeduler for Resource Manager
RSMN  Remote Slave Monitor
PING  interconnect latency measurement
FMON  File Mapping Monitor Process
PSP0  process spawner 0
RMON  rolling migration monitor
ACMS  Atomic Controlfile to Memory Server
DSKM  slave DiSKMon process
IPC0  IPC Service 0
RPOP  instant restore repopulation daemon
DIA0  diagnosibility process 0
DIA1  diagnosibility process 1
(중략)
DBW0  db writer process 0
DBW1  db writer process 1
DBW2  db writer process 2
DBW3  db writer process 3
DBW4  db writer process 4
DBW5  db writer process 5
DBW6  db writer process 6
DBW7  db writer process 7
DBW8  db writer process 8
DBW9  db writer process 9
DBWa  db writer process 10 (a)
DBWb  db writer process 11 (b)
(중략)
TMON  Transport Monitor
ARC0  Archival Process 0
ARC1  Archival Process 1
ARC2  Archival Process 2
ARC3  Archival Process 3
ARC4  Archival Process 4
(중략)
LGWR  Redo etc.
LCK0  Lock Process 0
CKPT  checkpoint
cs


또루아빠 SQL(오라클,mysql) , , , , , , , , ,