ABOUT ME

통계와 개발에 대한 일기로 통개학을 운영합니다. 조그마한 도움이 되기를 바랍니다.

Today
Yesterday
Total
  • [SQL] Oracle Process란?(+Instance)
    프로그램/SQL 2024. 7. 31. 21:59

     

     

    | Process란?

     

    프로세스의 사전적 의미는 '컴퓨터에서 연속적으로 실행되고 있는 프로그램이다.'라고 설명되어 있습니다. 조금 더 익숙한 표현으로 말하자면 사용자나 다른 프로세스로 부터 요청 받아 컴퓨터가 해야할 일(또는 하고 있는 일)입니다. 

     

     

     

     


     

     

     

    | Processor란?

     

    프로세서와 프로세스는 차이가 있으며, 프로세서는 CPU나 MicroProsessor를 의미합니다. 이러한 프로세서는 프로세스를 동작시키는 하드웨어적 장치로 용어를 구분해서 사용하시길 바랍니다.

     

     

     


     

     

     

     

    | Process 생명 주기

     

    프로세스는 생성부터 종료까지 아래와 같은 생명 주기가 존재하며, 실행에서 대기로 상태가 변경되는 것을 Block이라 하며, 이는 I/O가 이루어지면서 블록을 가져오기 때문입니다. 즉 SQL의 성능 저하는 대기 상태에서 발생하는 것을 알 수 있습니다(Process와 I/O가 SQL 속도에 미치는 영향 보러가기).

     

     

    <Process 생명 주기>

     

     

     


     

     

     

    | Oracle Process

     

    그렇다면 오라클에는 어떤 프로세스가 존재할까요? 오라클에는 여러가지 프로세스가 존재하며, 그 중 필수 프로세스라고 불리는 5가지를 설명드리도록 하겠습니다.

     

     

    1. SMON(System Monitor)

     

    • 오라클 인스턴스를 관리하는 프로세스
    • 인스턴스 Fail시 Redo Log Files에서 Log를 찾아 인스턴스를 복구
    • 임시 세그먼트를 정리하고, 사용하지 않는 공간을 회수
    • 테이블 스페이스 내의 미사용 공간을 통합해 디스크 공간의 단편화를 줄임

     

    2. PMON(Process Monitor)

     

    • 오라클 서버에서 사용되는 프로세스들을 감시하는 프로세스(오라클 프로세스의 감독관)
    • 정상적으로 작동하지 않는 프로세스들을 찾아서 종료
    • 비정상적으로 종료된 프로세스들을 정리해 SGA 리소스를 재사용
    • 커밋되지 않은 트랜잭션을 롤백(Undo 데이터를 활용)

     

    3. DBWn(Database Writer)

     

    • 변경된 데이터(DB Buffer Cache에 있는 Dirty Buffer Block)를 Data Files에 기록
    • DBWR이라고도 한다.

     

    4. LGWR(Log Writer)

     

    • DB Buffer Cache에서 발생한 변화를 Redo Log Buffer에 기록
    • 아래와 같은 조건이 만족되었을 때, Redo Log Files에 Log를 저장
      1) Commit으로 트랜잭션이 완료되었을 때
      2) Redo Log Buffer가 일정 이상 찼을 때
      3) Check Point가 발생하였을 때
      4) 일정시간(기본 3초)마다 저장

     

    5. CKPT(Check Point)

     

    • SGA 메모리에 있는 변경 사항들을 DB의 Data Files로 저장하는 것을 보장
    • Check Point 동작 시, LGWR 프로세스를 통해 Redo Log Files로 변경 사항을 모두 옮기고 DBWn 프로세스를 통해 Data Files에 Dirty Buffer를 연동 시킴
    • Check Point를 Data Files와 Control Files에 저장

     

     

    5개의 오라클 프로세스, SGA를 합치면 아래 그림과 같은 Instance를 나타낼 수 있습니다. 인스턴스란 SGA와 프로세스를 통합한 것으로 메모리와 프로세스를 다루는 작업공간 입니다. 요번 포스팅에서 살펴본 프로세스 외에도 ARCn과 같은 다른 프로세스들 존재하며, 기회가 된다면 다루어 보도록 하겠습니다.

     

     

    <Oracle의 Instance>

     

     

     

     

     


     

     

    | 데이터 변경 시 Instance 동작 순서

     

     

    1. DB Buffer Cache에는 'Free Buffer', 'Dirty Buffer', 'Pinned Buffer' 세 가지가 있으며, 데이터가 변경된 경우 Dirty Buffer에 변경사항이 기록됩니다.
    2. Dirty Buffer의 변경 사항이 Redo Log Buffer에 기록됩니다.
    3. 특정 조건을 만족하였을 때(3초 마다, Commit 시, Check Point 등) Redo Log Buffer(in SGA)의 내용이 Redo Log Files(in DB)에 저장됩니다.
    4. 이후 Dirty Buffer가 많아져 임계값에 도달했거나, Block을 저장할 Free Buffer가 없거나, Check Point가 동작하는 등의 경우 DBWn 프로세스가 DB Buffer Cache에 있는 Dirty Buffer를 Data Files에 기록해 Free Buffer를 확보합니다.

     

     

     

    | Q. 데이터 수정 시, 바로 DBWn을 사용하지 않고 LGWR을 동작한 후에 DBWn을 사용하는가?

     

    DB에 수정 사항이 발생 했을 때, DBWn을 통해 바로 Data Files로 Dirty Buffer 내용을 옮겨 연동 시키면 안되나? 왜 굳이 LGWR을 통해 Redo Log Files로 옮기고 DBWn으로 Data Files로 한번 더 옮기는가?라는 의문이 들 수 있습니다.

     

    DBWn과 LGWR 모두 DB 디스크에 저장하는 방법으로 I/O가 발생해 프로세스가 대기 상태로 들어갑니다. 하지만 DBWn은 Random 액세스 방식(임의 쓰기)이며, LGWR은 Append 방식(순차적 쓰기)으로 I/O가 동작해 속도 차이가 발생합니다. 즉, LGWR은 디스크의 연속된 위치에 데이터를 기록해 빠르게 Redo Log Buffer를 옮길 수 있어 LGWR로 변경 사항을 안전하게 기록하고(예상치 못한 Fail에 대비해 변경 사항을 저장) 이후 한번에 DBWn을 통해 Data Files에 Dirty Buffer를 연동 시킵니다. 이는 Redo의 목표 중 Fast Commit에도 연관되어 Redo와 Undo를 설명할 때 다시 말씀드리도록 하겠습니다.

     

     

     

     

    '프로그램 > SQL' 카테고리의 다른 글

Designed by Tistory.