Search Results for 'SMON'

1 POSTS

  1. 2012|05 Oracle - 백그라운드 프로세스

Oracle - 백그라운드 프로세스

Posted 05 17, 2012 09:36, Filed under: DataBase/Oracle


# 백그라운드 프로세스

오라클 인스턴스는 두 가지로 구성되어 있다.
SGA와 백그라운드 프로세스 집합이다.
백그라운드 프로세스는 데이터베이스를 지속적으로 수행하는 데 필요한 일상적인 유지 업무를 담당한다.
예를 들면 블록 버퍼 캐시를 유지하는 프로세스는 필요 시에 블록을 데이터 파일로 기록한다.
어떤 프로세스는 온라인 리두 로그 파일이 채워지는 대로 아카이브 파일로 복제하는 일을 담당하고 있다.
어떤 프로세스는 갑자기 중단된 프로세스의 자원을 정리하는 일을 담당하고 있다.
각 프로세스는 자신의 작업에 잘 특화되어 있지만, 다른 모든 프로세스와 공동으로 일하기도 하낟.
예를 들면, 로그 파일에 기록하는 일을 담당하는 프로세스는 한 개의 로그 파일을 다 채우고 다음 로그 파일로 옮길 때 꽉 찬 로그 파일을 아카이브 파일로 복제하는 프로세스에 할 일이 있다는 것을 알려준다.

V$ 뷰를 쿼리하면 가능한 모든 오라클 백그라운드 프로세스를 알 수 있고, 시스템에서 현재 어느 프로세스가 사용 중인지를 볼 수 있다.
SQL> select paddr, name, description
  2  from v$bgprocess
  3  order by paddr desc
  4  /

PADDR            NAME  DESCRIPTION
---------------- ----- ----------------------------------------------------------------
00000000D04E60E0 CJQ0  Job Queue Coordinator
00000000D04E1FE0 SMCO  Space Manager Process
00000000D04DFF60 QMNC  AQ Coordinator
00000000D04D5CE0 MMNL  Manageability Monitor Process 2
00000000D04D4CA0 MMON  Manageability Monitor Process
00000000D04D3C60 RECO  distributed recovery
00000000D04D2C20 SMON  System Monitor Process
00000000D04D1BE0 CKPT  checkpoint
00000000D04D0BA0 LGWR  Redo etc.
00000000D04CFB60 DBW0  db writer process 0
00000000D04CEB20 MMAN  Memory Manager
00000000D04CDAE0 DIA0  diagnosibility process 0
00000000D04CCAA0 PSP0  process spawner 0
00000000D04CBA60 DBRM  DataBase Resource Manager
00000000D04CAA20 DIAG  diagnosibility process
00000000D04C99E0 GEN0  generic0
00000000D04C89A0 VKTM  Virtual Keeper of TiMe process
00000000D04C7960 PMON  process cleanup
00               VKRM  Virtual sKeduler for Resource Manager
00               RSMN  Remote Slave Monitor
00               PING  interconnect latency measurement
00               FMON  File Mapping Monitor Process
00               ACMS  Atomic Controlfile to Memory Server
00               DSKM  slave DiSKMon process
00               DIA1  diagnosibility process 1
00               DIA2  diagnosibility process 2
00               DIA3  diagnosibility process 3
00               DIA4  diagnosibility process 4
00               DIA5  diagnosibility process 5
00               DIA6  diagnosibility process 6
00               DIA7  diagnosibility process 7
00               DIA8  diagnosibility process 8
00               DIA9  diagnosibility process 9
00               LMON  global enqueue service monitor
00               LMD0  global enqueue service daemon 0
00               LMS0  global cache service process 0
00               LMS1  global cache service process 1
00               LMS2  global cache service process 2
00               LMS3  global cache service process 3
00               LMS4  global cache service process 4
00               LMS5  global cache service process 5
00               LMS6  global cache service process 6
00               LMS7  global cache service process 7
00               LMS8  global cache service process 8
00               LMS9  global cache service process 9
00               LMSa  global cache service process 10
00               LMSb  global cache service process 11
00               LMSc  global cache service process 12
00               LMSd  global cache service process 13
00               LMSe  global cache service process 14
00               LMSf  global cache service process 15
00               LMSg  global cache service process 16
00               LMSh  global cache service process 17
00               LMSi  global cache service process 18
00               LMSj  global cache service process 19
00               LMSk  global cache service process 20
00               LMSl  global cache service process 21
00               LMSm  global cache service process 22
00               LMSn  global cache service process 23
00               LMSo  global cache service process 24
00               LMSp  global cache service process 25
00               LMSq  global cache service process 26
00               LMSr  global cache service process 27
00               LMSs  global cache service process 28
00               LMSt  global cache service process 29
00               LMSu  global cache service process 30
00               LMSv  global cache service process 31
00               LMSw  global cache service process 32
00               LMSx  global cache service process 33
00               LMSy  global cache service process 34
00               RMS0  rac management server
00               LMHB  lm heartbeat monitor
00               DBW1  db writer process 1
00               DBW2  db writer process 2
00               DBW3  db writer process 3
00               DBW4  db writer process 4
00               DBW5  db writer process 5
00               DBW6  db writer process 6
00               DBW7  db writer process 7
00               DBW8  db writer process 8
00               DBW9  db writer process 9
00               DBWa  db writer process 10 (a)
00               DBWb  db writer process 11 (b)
00               DBWc  db writer process 12 (c)
00               DBWd  db writer process 13 (d)
00               DBWe  db writer process 14 (e)
00               DBWf  db writer process 15 (f)
00               DBWg  db writer process 16 (g)
00               DBWh  db writer process 17 (h)
00               DBWi  db writer process 18 (i)
00               DBWj  db writer process 19 (j)
00               DBWk  db writer process 20 (k)
00               DBWl  db writer process 21 (l)
00               DBWm  db writer process 22 (m)
00               DBWn  db writer process 23 (n)
00               DBWo  db writer process 24 (o)
00               DBWp  db writer process 25 (p)
00               DBWq  db writer process 26 (q)
00               DBWr  db writer process 27 (r)
00               DBWs  db writer process 28 (s)
00               DBWt  db writer process 29 (t)
00               DBWu  db writer process 30 (u)
00               DBWv  db writer process 31 (v)
00               DBWw  db writer process 32 (s)
00               DBWx  db writer process 33 (t)
00               DBWy  db writer process 34 (u)
00               DBWz  db writer process 35 (v)
00               MRP0  Managed Standby Recovery
00               ARC0  Archival Process 0
00               ARC1  Archival Process 1
00               ARC2  Archival Process 2
00               ARC3  Archival Process 3
00               ARC4  Archival Process 4
00               ARC5  Archival Process 5
00               ARC6  Archival Process 6
00               ARC7  Archival Process 7
00               ARC8  Archival Process 8
00               ARC9  Archival Process 9
00               ARCa  Archival Process 10
00               ARCb  Archival Process 11
00               ARCc  Archival Process 12
00               ARCd  Archival Process 13
00               ARCe  Archival Process 14
00               ARCf  Archival Process 15
00               ARCg  Archival Process 16
00               ARCh  Archival Process 17
00               ARCi  Archival Process 18
00               ARCj  Archival Process 19
00               ARCk  Archival Process 20
00               ARCl  Archival Process 21
00               ARCm  Archival Process 22
00               ARCn  Archival Process 23
00               ARCo  Archival Process 24
00               ARCp  Archival Process 25
00               ARCq  Archival Process 26
00               ARCr  Archival Process 27
00               ARCs  Archival Process 28
00               ARCt  Archival Process 29
00               NSA1  Redo transport NSA1
00               NSS1  Redo transport NSS1
00               NSA2  Redo transport NSA2
00               NSS2  Redo transport NSS2
00               NSA3  Redo transport NSA3
00               NSS3  Redo transport NSS3
00               NSA4  Redo transport NSA4
00               NSS4  Redo transport NSS4
00               NSA5  Redo transport NSA5
00               NSS5  Redo transport NSS5
00               NSA6  Redo transport NSA6
00               NSS6  Redo transport NSS6
00               NSA7  Redo transport NSA7
00               NSS7  Redo transport NSS7
00               NSA8  Redo transport NSA8
00               NSS8  Redo transport NSS8
00               NSA9  Redo transport NSA9
00               NSS9  Redo transport NSS9
00               NSAA  Redo transport NSAA
00               NSSA  Redo transport NSSA
00               NSAB  Redo transport NSAB
00               NSSB  Redo transport NSSB
00               NSAC  Redo transport NSAC
00               NSSC  Redo transport NSSC
00               NSAD  Redo transport NSAD
00               NSSD  Redo transport NSSD
00               NSAE  Redo transport NSAE
00               NSSE  Redo transport NSSE
00               NSAF  Redo transport NSAF
00               NSSF  Redo transport NSSF
00               NSAG  Redo transport NSAG
00               NSSG  Redo transport NSSG
00               NSAH  Redo transport NSAH
00               NSSH  Redo transport NSSH
00               NSAI  Redo transport NSAI
00               NSSI  Redo transport NSSI
00               NSAJ  Redo transport NSAJ
00               NSSJ  Redo transport NSSJ
00               NSAK  Redo transport NSAK
00               NSSK  Redo transport NSSK
00               NSAL  Redo transport NSAL
00               NSSL  Redo transport NSSL
00               NSAM  Redo transport NSAM
00               NSSM  Redo transport NSSM
00               NSAN  Redo transport NSAN
00               NSSN  Redo transport NSSN
00               NSAO  Redo transport NSAO
00               NSSO  Redo transport NSSO
00               NSAP  Redo transport NSAP
00               NSSP  Redo transport NSSP
00               NSAQ  Redo transport NSAQ
00               NSSQ  Redo transport NSSQ
00               NSAR  Redo transport NSAR
00               NSSR  Redo transport NSSR
00               NSAS  Redo transport NSAS
00               NSSS  Redo transport NSSS
00               NSAT  Redo transport NSAT
00               NSST  Redo transport NSST
00               NSAU  Redo transport NSAU
00               NSSU  Redo transport NSSU
00               NSAV  Redo transport NSAV
00               NSSV  Redo transport NSSV
00               LCK0  Lock Process 0
00               ABMR  Auto BMR Background Process
00               LSP1  Dictionary build process for Logical Standby
00               LSP0  Logical Standby
00               LSP2  Set Guard Standby Information for Logical Standby
00               CTWR  Change Tracking Writer
00               RVWR  Recovery Writer
00               FBDA  Flashback Data Archiver Process
00               GTX0  Global Txn process 0
00               GTX1  Global Txn process 1
00               GTX2  Global Txn process 2
00               GTX3  Global Txn process 3
00               GTX4  Global Txn process 4
00               GTX5  Global Txn process 5
00               GTX6  Global Txn process 6
00               GTX7  Global Txn process 7
00               GTX8  Global Txn process 8
00               GTX9  Global Txn process 9
00               GTXa  Global Txn process 10
00               GTXb  Global Txn process 11
00               GTXc  Global Txn process 12
00               GTXd  Global Txn process 13
00               GTXe  Global Txn process 14
00               GTXf  Global Txn process 15
00               GTXg  Global Txn process 16
00               GTXh  Global Txn process 17
00               GTXi  Global Txn process 18
00               GTXj  Global Txn process 19
00               RCBG  Result Cache: Background
00               EMNC  EMON Coordinator
00               DMON  DG Broker Monitor Process
00               RSM0  Data Guard Broker Resource Guard Process 0
00               NSV0  Data Guard Broker NetSlave Process 0
00               NSV1  Data Guard Broker NetSlave Process 1
00               NSV2  Data Guard Broker NetSlave Process 2
00               NSV3  Data Guard Broker NetSlave Process 3
00               NSV4  Data Guard Broker NetSlave Process 4
00               NSV5  Data Guard Broker NetSlave Process 5
00               NSV6  Data Guard Broker NetSlave Process 6
00               NSV7  Data Guard Broker NetSlave Process 7
00               NSV8  Data Guard Broker NetSlave Process 8
00               NSV9  Data Guard Broker NetSlave Process 9
00               NSVA  Data Guard Broker NetSlave Process A
00               NSVB  Data Guard Broker NetSlave Process B
00               NSVC  Data Guard Broker NetSlave Process C
00               NSVD  Data Guard Broker NetSlave Process D
00               NSVE  Data Guard Broker NetSlave Process E
00               NSVF  Data Guard Broker NetSlave Process F
00               NSVG  Data Guard Broker NetSlave Process G
00               NSVH  Data Guard Broker NetSlave Process H
00               NSVI  Data Guard Broker NetSlave Process I
00               NSVJ  Data Guard Broker NetSlave Process J
00               NSVK  Data Guard Broker NetSlave Process K
00               NSVL  Data Guard Broker NetSlave Process L
00               NSVM  Data Guard Broker NetSlave Process M
00               NSVN  Data Guard Broker NetSlave Process N
00               NSVO  Data Guard Broker NetSlave Process O
00               NSVP  Data Guard Broker NetSlave Process P
00               NSVQ  Data Guard Broker NetSlave Process Q
00               NSVR  Data Guard Broker NetSlave Process R
00               NSVS  Data Guard Broker NetSlave Process S
00               NSVT  Data Guard Broker NetSlave Process T
00               NSVU  Data Guard Broker NetSlave Process U
00               INSV  Data Guard Broker INstance SlaVe Process
00               FSFP  Data Guard Broker FSFO Pinger
00               RBAL  ASM Rebalance master
00               ARB0  ASM Rebalance 0
00               ARB1  ASM Rebalance 1
00               ARB2  ASM Rebalance 2
00               ARB3  ASM Rebalance 3
00               ARB4  ASM Rebalance 4
00               ARB5  ASM Rebalance 5
00               ARB6  ASM Rebalance 6
00               ARB7  ASM Rebalance 7
00               ARB8  ASM Rebalance 8
00               ARB9  ASM Rebalance 9
00               ARBA  ASM Rebalance 10
00               ASMB  ASM Background
00               MARK  mark AU for resync koordinator
00               GMON  diskgroup monitor
00               VBG0  Volume BG 0
00               VBG1  Volume BG 1
00               VBG2  Volume BG 2
00               VBG3  Volume BG 3
00               VBG4  Volume BG 4
00               VBG5  Volume BG 5
00               VBG6  Volume BG 6
00               VBG7  Volume BG 7
00               VBG8  Volume BG 8
00               VBG9  Volume BG 9
00               VDBG  Volume Driver BG
00               VMB0  Volume Membership 0
00               ACFS  ACFS CSS
00               XDMG  cell automation manager
00               XDWK  cell automation worker actions

295 rows selected.


위 조회 결과에서 00과 다른 PADDR을 가진 로우는 시스템에서 실행 중인 프로세스(쓰레드)다.

백그라운드 프로세스는 두 가지 부류, 즉 특화된 작업을 수행하는 프로세스와 그 외 다른 다양한 작업을 수행하는 프로세스(예:유틸리티 프로세스)가 있다.
예를 들면 DBMS_JOB/DBMS_SCHEDULER 패키지를 통해서만 액세스가 가능한 내부 작업용 큐를 위한 유틸리티 백그라운드 프로세스가 존재한다.
이 프로세스는 작업용 큐를 감시하고 큐 안에 포함된 작업을 실행한다.
백그라운드 프로세스는 클라이언트 커넥션이 없다는 점만 제외하면 많은 점에서 dedicated server 프로세스와 유사하다.

특화된 백그라운드 프로세스

특화된 프로세스의 개수, 이름, 그리고 타입은 릴리즈에 따라 다를 수 있다.
그림 5-4는 특화된 목적을 가진 오라클 백그라운드 프로세스를 보여주고 있다.

그림 5-4 | 특화된 백그라운드 프로세스

예를 들면 오라클 데이터베이스 11g 릴리즈 2에서 데이터베이스는 최소한의 init.ora 파라미터를 가지고 시작한다.
[oracle@sunshiny-net dbs]$ cat init.ora

db_name='ORCL'
memory_target=1G
processes = 150
audit_file_dest='<ORACLE_BASE>/admin/orcl/adump'
audit_trail ='db'
db_block_size=8192
db_domain=''
db_recovery_file_dest='<ORACLE_BASE>/flash_recovery_area'
db_recovery_file_dest_size=2G
diagnostic_dest='<ORACLE_BASE>'
dispatchers='(PROTOCOL=TCP) (SERVICE=ORCLXDB)'
open_cursors=300
remote_login_passwordfile='EXCLUSIVE'
undo_tablespace='UNDOTBS1'
# You may want to ensure that control files are created on separate physical
# devices
control_files = (ora_control1, ora_control2)
compatible ='11.2.0'

대략 17개의 백그라운드 프로세스가 기동된다.
SUNSHINY@ora11g > select paddr, name, description
  2  from v$bgprocess
  3  where paddr <> '00'
  4  order by paddr desc
  5  /

PADDR            NAME  DESCRIPTION
---------------- ----- --------------------------------
00000000D04E60E0 CJQ0  Job Queue Coordinator
00000000D04E1FE0 SMCO  Space Manager Process
00000000D04DFF60 QMNC  AQ Coordinator
00000000D04D5CE0 MMNL  Manageability Monitor Process 2
00000000D04D4CA0 MMON  Manageability Monitor Process
00000000D04D3C60 RECO  distributed recovery
00000000D04D2C20 SMON  System Monitor Process
00000000D04D1BE0 CKPT  checkpoint
00000000D04D0BA0 LGWR  Redo etc.
00000000D04CFB60 DBW0  db writer process 0
00000000D04CEB20 MMAN  Memory Manager
00000000D04CDAE0 DIA0  diagnosibility process 0
00000000D04CCAA0 PSP0  process spawner 0
00000000D04CBA60 DBRM  DataBase Resource Manager
00000000D04CAA20 DIAG  diagnosibility process
00000000D04C99E0 GEN0  generic0
00000000D04C89A0 VKTM  Virtual Keeper of TiMe process
00000000D04C7960 PMON  process cleanup

18 rows selected.


오라클 데이터베이스 10g 릴리즈 2에서는 memory_target 파라미터만 sga_target과 pga_aggreate_target 파라미터로 바뀐 위와 동일한 init.ora를 사용하면, 12개의 백그라운드 프로세스만 보게 된다.
SUNSHINY@ora10g > select paddr, name, description
  2      from v$bgprocess
  3      where paddr <> '00'
  4      order by paddr desc
  5  /

PADDR    NAME       DESCRIPTION
-------- ---------- ----------------------------------
6FA8C3B8 QMNC       AQ Coordinator
6FA8ACD8 MMNL       Manageability Monitor Process 2
6FA8A720 MMON       Manageability Monitor Process
6FA8A168 CJQ0       Job Queue Coordinator
6FA89BB0 RECO       distributed recovery
6FA895F8 SMON       System Monitor Process
6FA89040 CKPT       checkpoint
6FA88A88 LGWR       Redo etc.
6FA884D0 DBW0       db writer process 0
6FA87F18 MMAN       Memory Manager
6FA87960 PSP0       process spawner 0
6FA873A8 PMON       process cleanup

12 rows selected.

인스턴스를 시작할 때 위 프로세스 모두를 볼 수 있는 것은 아니지만, 대다수 프로세스는 존재할 것이다.
데이터베이스가 ARCHIVELOG 모드고 자동 아카이빙으로 설정했다면, ARCn(archiver) 프로세스를 볼 수 있다.
또한 오라클 RAC(한 클러스터 내에 존재하는 서로 다른 장비에서 수행 중인 여러 개 인스턴스가 같은 물리적 데이터베이스를 마운트하고 오픈할 수 있는 오라클 구성)를 구동하고 있다면, LMD0, LCKn, LMON 그리고 LMSn 프로세스를 볼 수 있다.

다라서 그림 5-4는 오라클 인스턴스를 시작하고 데이터베이스를 마운트하고 오픈했다면 불 수 있는 프로세스들을 보여주고 있다.
리눅스 시스템처럼 오라클이 멀티프로세스 아키텍처로 구현한 운영체제에서는 물리적으로 아래와 같은 프로세스를 볼 수 있다.
인스턴스를 시작한 후에 다음과 같은 리스트를 볼 수 있다.
[oracle@sunshiny-net ~]$ ps -aef | grep ora_...._$ORACLE_SID | grep -v grep
oracle    4210     1  0 08:11 ?        00:00:04 ora_pmon_ora11g
oracle    4212     1  0 08:11 ?        00:00:21 ora_vktm_ora11g
oracle    4216     1  0 08:11 ?        00:00:00 ora_gen0_ora11g
oracle    4218     1  0 08:11 ?        00:00:00 ora_diag_ora11g
oracle    4220     1  0 08:11 ?        00:00:00 ora_dbrm_ora11g
oracle    4222     1  0 08:11 ?        00:00:00 ora_psp0_ora11g
oracle    4224     1  0 08:11 ?        00:00:14 ora_dia0_ora11g
oracle    4226     1  0 08:11 ?        00:00:00 ora_mman_ora11g
oracle    4228     1  0 08:11 ?        00:00:00 ora_dbw0_ora11g
oracle    4230     1  0 08:11 ?        00:00:00 ora_lgwr_ora11g
oracle    4232     1  0 08:11 ?        00:00:02 ora_ckpt_ora11g
oracle    4234     1  0 08:11 ?        00:00:01 ora_smon_ora11g
oracle    4236     1  0 08:11 ?        00:00:00 ora_reco_ora11g
oracle    4238     1  0 08:11 ?        00:00:05 ora_mmon_ora11g
oracle    4240     1  0 08:11 ?        00:00:09 ora_mmnl_ora11g
oracle    4242     1  0 08:11 ?        00:00:00 ora_d000_ora11g
oracle    4244     1  0 08:11 ?        00:00:00 ora_d001_ora11g
oracle    4246     1  0 08:11 ?        00:00:00 ora_d002_ora11g
oracle    4248     1  0 08:11 ?        00:00:01 ora_s000_ora11g
oracle    4250     1  0 08:11 ?        00:00:00 ora_s001_ora11g
oracle    4252     1  0 08:11 ?        00:00:00 ora_s002_ora11g
oracle    4254     1  0 08:11 ?        00:00:00 ora_s003_ora11g
oracle    4256     1  0 08:11 ?        00:00:07 ora_s004_ora11g
oracle    4346     1  0 08:11 ?        00:00:00 ora_qmnc_ora11g
oracle    4404     1  0 15:07 ?        00:00:00 ora_w000_ora11g
oracle    4408     1  0 08:11 ?        00:00:04 ora_cjq0_ora11g
oracle    4451     1  0 08:11 ?        00:00:00 ora_q000_ora11g
oracle    4454     1  0 08:11 ?        00:00:00 ora_q001_ora11g
oracle    5357     1  0 08:17 ?        00:00:00 ora_smco_ora11g

PMON : 프로세스 모니터
PMON(process monitor)은 비정상적으로 커넥션을 종료한 후에 정리하는 일을 담당한다.
예를 들면 dedicated server가 '실패' 하거나 다른 특정한 이유로 죽으면, PMON은 잘못된 작업을 바로잡고(작업을 복구하거나 원상태로 되돌리는 것) 자원을 해제한다.
PMON은 커밋되지 않은 작업에 대해서 롤백을 개시하고 락을 해제하고, 실패한 프로세스에 할당된 SGA 자원을 풀어준다.

PMON은 커넥션이 갑자기 중단된 후에 정리하는 일과는 별도로 다른 오라클 백그라운드 프로세스를 모니터하고, 필요하다면(그리고 가능하다면) 해당 프로세스를 재시작하는 일을 맡고 있다.
만약 shared server 또는 dispatcher가 실패한다면(갑자기 기능을 멈춘다면), PMON이 개입하여 동일한 프로세스를 재시작시킨다(실패한 프로세스에 대한 정리 작업 후에).
PMON은 모든 오라클 프로세스를 지켜보다가 적절한 시점에 재시작시키거나 또는 인스턴스를 종료시킨다.
예를 들면 LGWR(데이터베이스 log writer 프로세스)이 실패한 경우에는 인스턴스를 중지하는 것이 적절한 조치다.
이것은 매우 심각한 오류이기 때문에 가장 안전한 조치 방법은 인스턴스를 종료시키고 정상적인 복구 절차를 밟아서 데이터를 고치도록 해야 한다(주의할 것은 이것은 드문 경우이므로 오라클 지원센터로 즉시 알려주어야 한다는 사실이다).

인스턴스를 위해 PMON이 수행하는 또 다른 일은 자신을 오라클 TNS 리스너에 등록하는 일이다.
인스턴스를 구동하면 PMON 프로세스는 알려진(well-known) 포트 번호로 폴링(polling)한다.
오라클이 사용하는 기본 포트 번호 1521이다. 리스너가 알려진 포트 번호와 다른 포트 번호로 시작한다면 무슨 일이 일어날까?
LOCAL_LISTENER 파라미터를 통해 리스너 주소를 명시적으로 설정해줄 필요가 있다는 사실만 제외하면 메커니즘은 동일하다.
데이터베이스 인스턴스가 구동할 때 리스너가 실행중이라면 PMON은 리스너와 연동하여 인스턴스의 서비스 이름, 부하 메트릭(metrics) 같은 관련 파라미터를 리스너에 전달한다.
리스너가 실행 상태가 아니라면 PMON은 주기적으로 리스너와 접속을 시도하여 자기 자신을 등록하려고 한다.

SMON : 시스템 모니터
SMON(system monitor)은 시스템 레벨의 모든 작업을 수행하는 프로세스다.
PMON은 개별 프로세스에 관심이 있는 반면, SMON은 시스템 레벨 관점으로 일을 바라보며 데이터베이스를 위한 가비지 컬렉터(garbage collector) 역할을 수행한다.
그런 작업 중에 다음과 같은 작업을 포함하고 있다.

    * 템포러리 공간 정리 : 만약에 CREATE_INDEX 세션이 갑자기 중단 되면, SMON은 TEMPORARY로 표시된 익스텐트를 정리하는 일을 맡는다.
       다른 작업이 생성한 임시 익스텐트 또한 SMON이 맡아서 처리한다.

    * 빈 공간 합침 : 만약에 딕셔너리가 관리하는 테이블스페이스를 사용하고 있다면, SMON은 테이블 스페이스에서 빈 익스텐트와 서로 인접한 익스텐트를 가져와서 한 개의 큰 빈 익스텐트로 합치는 일을 맡는다.
       이것은 pctincrease 가 0이 아닌 디폴트 스토리지 절을 가진 dictionary-managed 테이블 스페이스에서만 일어난다.

    * 가용하지 않는 파일을 대상으로 활동 중인 트랜잭션 복구 : 이것은 데이터베이스 구동 시 SMON의 역할과 비슷하다.
       SMON은 인스턴스를 복구하는 시점에 복구할 데이터 파일을 사용할 수 없어서 건너뛴, 실패한 트랜잭션을 복구한다.
       예를 들면 데이터 파일이 마운트되지 않은 디스크 상에 존재했을 수도 있다. 데이터 파일이 가용하게 되면 SMON은 파일을 복구한다.

    * RAC에서 실패한 노드의 인스턴스 복구를 수행 : 오라클 RAC 구성에서 클러스터 내에 존재하는 한 데이터베이스 인스턴스가 실패하면(예:인스턴스가 실행 중인 장비가 실패한 경우), 클러스터 내에 존재하는 다른 노드가 실패한 인스턴스의 리두 로그 파일을 열어서 모든 데이터에 대한 복구작업을 수행한다.

    * OBJ$ 정리하기 : OBJ$ 테이블은 데이터베이스에서 거의 모든 객체(테이블, 인덱스, 트리거, 뷰 등)에 대한 엔트리(entry)를 포함하고 있는 low-level 데이터 딕셔너리 테이블이다.
    OBJ$ 테이블은 삭제된 객체 엔트리뿐만 아니라 오라클의 의존성(dependency) 메커니즘에서 사용했지만, 현재는 더 이상 존재하지 않는 객체를 표현하는 엔트리를 갖고 있다.
    SMON은 OBJ$ 테이블에서 더 이상 필요하지 않은 이런 로우를 제거하는 프로세스다.

    * 언두 세그먼트 줄이기 : SMON은 자동으로 언두 세그먼트의 크기를 최적으로 줄이는 작업을 수행한다(설정되었다면).

    * 언두 세그먼트 오프라인하기 : DBA는 활동 중인 트랜잭션이 아직 사용 중인 언두 세그먼트를 오프라인 상태로 바꿀 수 있다.
       활동 중인 트랜잭션이 오프라인 상태인 언두 세그먼트를 사용하는 것은 가능하지만, 이렇게 되면 언두 세그먼트는 불완전한 오프라인('pending offline'으로 표시된다) 상태로 바뀐다.
       SMON은 백그라운드에서 언두 세그먼트를 완전한 오프라인 상태로 바꾸기 위해 성공할 때까지 주기적으로 시도한다.

위에서 나열한 일 말고도 SMON은 DBA_TAB_MONITORING 뷰에서 나타나는 모니터링 통계를 삭제하는 일, SMON_SCN_TIME 테이블에서 저장된 SCN 대 타임스탬프 매핑 정보를 제거하는 일 등 수행하는 일이 많다.
그러므로 SMON 프로세스는 CPU 시간을 적지 않게 사용하며 아주 정상적인 활동으로 생각할 수 있다.
SMON은 주기적으로 깨어나서(또는 다른 백그라운드 프로세스가 SMON을 깨울 수 있다) 허드랫일 같은 가벼운 일들을 수행한다.

RECO : 분산 데이터베이스 복구
RECO(distributed database recovery)는 매우 특화된 작업을 수행한다.
2PC(two-phase commit, 2단계 커밋)를 하는 동안 장비가 멈춰 서거나 커넥션 손실 때문에 준비 상태로 남아 있는 트랜잭션을 복구한다.
2PC는 많은 이기종 데이터베이스에 영향을 미치는 변경을 원자적으로(atomically) 커밋하는 분산 프로토콜이다.
......
만약 어떤 사이트가 YES라고 응답한 다음 커밋할 준비를 하고 있는데 코디네이터로부터 커밋 지시를 받기도 전에 네트워크가 실패하거나 또는 여타 오류가 발생하면, 이 트랜잭션은 in-doubt 분산 트랜잭션이 된다.
2PC는 in-doubt 트랜잭션이 발생할 수 있는 시간 윈도우를 제한하기 위해 노력하지만, 해당 트랜잭션을 제거할 수는 없다.
바로 그때 실패하면 in-doubt 트랜잭션은 RECO의 책임이 된다.
RECO는 해당 트랜잭션의 결과를 알기 위해 코디네이터와 접촉을 시도한다.
RECO가 코디네이터와 접촉을 하기 전까지 해당 트랜잭션은 커밋되지 않은 상태로 남아 있다.
드디어 RECO가 트랜잭션 코디네이터와 다시 접촉하면 해당 트랜잭션을 커밋하거나 롤백한다.

CKPT : 체크포인트 프로세스
CKPT(checkpoint)는 이름이 의미하는 것처럼 체크포인트를 하지는 않는다.
체크포인트 작업은 대부분 DBWn의 작업이다.
CKPT는 데이터 파일의 파일 헤더를 수정하여 체크포인트를 직접 수행하는 프로세스를 도와줄 뿐이다.

DBWn : 데이터베이스 블록 Writer
DBWn(database block writer)은 dirty 블록을 디스크에 기록하는 일을 담당하는 백그라운드 프로세스다.
DBWn은 보통 버퍼 캐시에 빈 공간을 만들기 위해서 캐시에 있는 dirty 블록을 디스크로 내려 쓰거나(다른 데이터 읽기를 위한 빈 버퍼를 만들기 위해서) 체크포인트를 전진시킨다(인스턴스가 실패하면 오라클이 인스턴스를 복구하기 위해 온라인 리두 로그 파일에서 읽기 시작하는 지점을 앞으로 이동시킨다).
오라클이 다음 로그 파일로 넘어갈 때 체크포인트 시그널을 받는다.
오라클은 방금 다 채운 온라인 로그 파일을 더 이상 필요로 하지 않으므로 체크포인트를 전진시킬 필요가 없다.
만약 리두 로그 파일을 재사용해야 하는데 체크포인트를 앞으로 이동시킬 수 없다면, 'checkpoint not complete' 메시지를 받게 된다.

DBWn의 성능은 매우 중요하다.
만약 블록을 디스크에 기록하는 속도가 다른 블록을 캐시하기 위해 버퍼를 비우는 속도를 따라가지 못하면, Free Buffer Waits 대기 횟수와 Write Complete Waits 대기 시간이 증가한다.

DBWn은 한 개 이상 구성할 수 있다(실제로 36개(DBW0~DBW9, DBWa~DBWz)까지 구성할 수 있다).
대부분의 시스템은 보통 DBWn 프로세스를 하나만 실행하지만, 멀티 CPU 시스템에서는 두 개 이상 실행할 수 있다.
이것은 일반적으로 SGA에 있는 대용량 블록 캐시를 깨끗하게 유지하고, dirty(변경된) 블록을 디스크로 플러시하는 워크로드를 분산하는 데 사용된다.

정의에 의하면 DBWn은 디스크 곳곳에 흩어져 있는 블록을 갱신한다(DBWn은 산발적 쓰기(scattered writes) 작업을 훨씬 더 많이 수행한다).
데이터를 수정할 때 여기저기에 저장되어 있는 인덱스 블록과 랜덤하게 디스크에 분산되어 있는 데이터 블록을 변경한다.
반면에 LGWR은 리두 로그에 순차적인 쓰기 작업을 더 많이 수행한다.
이것은 DBWn과 LGWR의 중요한 차이점이며, 오라클이 DBWn 프로세스뿐만 아니라 리두 로그와 LGWR 프로세스를 별도로 갖고 있는 이유 중 하나다.
산발적 쓰기는 순차적 쓰기보다 현저하게 느리다.
그래서 DBWn  프로세스가 SGA 버퍼의 dirty 블록을 디스크에 기록할 수 있도록 LGWR 프로세스가 대규모 순차적인 쓰기를 함으로써 성능 향상을 달성할 수 있다.
사용자가 대기하는 동안 DBWn은 백그라운드에서 느린 작업을 수행하고, LGWR은 좀 더 빠른 작업을 수행한다는 사실은 전체적으로 더 나은 성능을 기대할 수 있다는 것을 의미한다.
그러므로 오라클이 필요 이상으로 I/O(로그 파일과 데이터 파일에 쓰기)를 좀 더 많이 수행한다고 하더라도 괜찮다.
커밋을 하는 동안 오라클이 물리적으로 변경된 블록을 디스크에 쓴다면 이론상으로는 온라인 리두 로그에 쓰는 일은 건너뛸 수 있다.
그러나 이렇게 건너뛰는 일은 실제로는 일어나지 않는다.
LGWR은 모든 트랜잭션에 대하여 리두 정보를 온라인 리두 로그에 쓰고, DBWn이 백그라운드에서 데이터베이스 블록을 디스크에 플러시한다.

LGWR : 로그 Writer
LGWR(log writer) 프로세스는 SGA에 위치한 리두 로그 버퍼의 내용을 디스크에 플러시하는 책임을 맡고 있다.
다음 중 한 조건을 만족할 때 이 작업을 수행한다.

    * 매 3초마다

    * 트랜잭션이 커밋을 발생할 때마다

    * 리두 로그 버퍼가 1/3로 채워졌거나 버퍼에 저장된 데이터를 1MB 담고 있을 때

이런 이유 때문에 매우 큰(수백/수천 메가바이트) 리두 로그 버퍼를 설정해도 실제로는 쓸모가 없다.
오라클은 훨씬 자주 그리고 지속적으로 리두 로그 버퍼를 플러시하기 때문에 리두 로그 버퍼의 전체 공간을 결코 사용할 수 없을 것이다.
DBWn이 수행해야 하는 산발적 I/O와 비교해 보면 로그는 순차적으로 쓰인다.
이와 같은 큰 배치 쓰기 작업은 파일의 각 부분에 많이 산발적 쓰기를 수행하는 것보다 훨씬 효율적이다.
이것이 우선적으로 LGWR과 리두 로그를 갖고 있는 주요 이유 중 하나다.
단지 순차적 I/O를 이용하여 변경된 바이트를 쓰는 작업의 효율성은 이후 초래될 추가 I/O보다 훨씬 크다.
오라클은 커밋할 때 데이터베이스 블록을 디스크에 직접 쓸 수 있지만, 블록 전부를 산발적으로 쓰는 작업을 수반하기 때문에 LGWR이 변경을 순차적으로 쓰는 일보다는 현저하게 느리다.

ARCn : 아카이브 프로세스
ARCn(archive) 프로세스는 LGWR이 온라인 리두 로그 파일을 채웠을 때 그 파일을 다른 위치로 복제하는 일을 담당한다.
이렇게 아카이빙된 리두 로그 파일은 미디어 복구 시에 사용될 수 있다.
온라인 리두 로그는 정전으로 인해 인스턴스가 종료됐을 때 데이터 파일을 수정하기 위해 사용될 수 있고, 아카이빙된 리두 로그는 하드 디스크에 장애가 발생했을 때 데이터 파일을 수정하기 위해 사용될 수 있다.
가령 데이터 파일 /d01/oradata/ora11g/system.dbf를 포함하고 있는 디스크 드라이브를 잃게 되면 지난 주에 받아 놓은 백업 본을 이용해 데이터 파일을 복구하고, 백업이 일어난 시점부터 생성된 아카이브 리두 로그와 온라인 리두 로그 모두 적용하여 장애가 발생한 시점으로 복구한다.
이 방식으로 데이터베이스에 있는 모든 데이터 파일을 복원할 수 있으며, 아무런 데이터의 손실 없이 업무를 진행할 수 있다.



출처 : 전문가를 위한 오라클 데이터베이스 아키텍처 - 토마스 카이트



※ 위 내용은, 여러 자료를 참고하거나 제가 주관적으로 정리한 것입니다.
   잘못된 정보나 보완이 필요한 부분을, 댓글 또는 메일로 보내주시면 많은 도움이 되겠습니다.
05 17, 2012 09:36 05 17, 2012 09:36


Trackback URL : http://develop.sunshiny.co.kr/trackback/757

Leave a comment


Recent Posts

  1. HDFS - Python Encoding 오류 처리
  2. HP - Vertica ROS Container 관련 오류...
  3. HDFS - Hive 실행시 System Time 오류
  4. HP - Vertica 사용자 쿼리 이력 테이블...
  5. Client에서 HDFS 환경의 데이터 처리시...

Recent Comments

  1. Generally I do not read post on bl... 레기읏룸 셔츠룸 차이. 레깅스룸 부엉이 01 24,
  2. Wonderful site. A lot of useful in... /427 01 23,
  3. 안녕하세요^^ 배그핵
  4. 안녕하세요^^ 도움이 되셨다니, 저... sunshiny
  5. 정말 큰 도움이 되었습니다.. 감사합... 사랑은

Recent Trackbacks

  1. cabo packages cabo packages %M
  2. airbnb host insurance airbnb host insurance %M
  3. beaches in cabo beaches in cabo %M
  4. joe’s dj service joe’s dj service %M
  5. short term rental property insurance short term rental property insurance %M

Calendar

«   01 2020   »
      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  

Bookmarks

  1. 위키피디아
  2. MysqlKorea
  3. 오라클 클럽
  4. API - Java
  5. Apache Hadoop API
  6. Apache Software Foundation
  7. HDFS 생태계 솔루션
  8. DNSBL - Spam Database Lookup
  9. Ready System
  10. Solaris Freeware
  11. Linux-Site
  12. 윈디하나의 솔라나라

Site Stats

TOTAL 2824964 HIT
TODAY 583 HIT
YESTERDAY 443 HIT