ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Oracle DB] Oracle Database 기본구조
    카테고리 없음 2024. 12. 16. 15:27

     

    * Oracle DB Server는 Instance와 Database로 구성된다.

    * Instance는 하나의 DB와 연관이 되는데, memory, background processes로 구성된다.

      Instance start를 해야 SGA영역이 생성된다

    * Database는 3개의 파일로 구성된다. 

    1) Datafiles : user data(table, index) 저장

    2) Logfiles : 복구에 사용되는 Log 저장

    3) Controlfiles: dbid, datafiles list, logfiles list, 동기화 정보

     

     

    SGA (System Global Area)

    * 필수 구성요소는 3가지 이다

    1) Shared Pool

    2) Database Buffer Cache

    3) Redo Log Buffer

     

    Instance Start할 때, SGA가 생성된다.

    Instance Shut down 시, SGA가 사라진다.

     

    서버프로세스는 로그인, 로그아웃시 시작 종료된다.

    인스턴스 시작종료와 무관함. 

    얘가 명령어 다 처리한다.

     

    또한, 모든 서버가 SGA를 공유하여 사용한다.

    각 서버가 사용하는 영역은 PGA임.

     

     

    Shared Pool

     

     

     

     

    📌Shared Pool 이란?

    shared SQL Area를 사용해서 소프트 파싱이 가능하도록 함. 

    반복 수행 빠르게 처리 가능. 

    이것이 바로 shared pool의 목적임

    p-code
    Exec Plan
    SQL

     

    특징

    1. 공유 SQL 영역

    2. 라이브러리캐시

    3. 데이터 딕셔너리 캐시

    * 데이터 딕셔너리 캐시

    Data Dictionary : 전db의 정보 다 기록한다

    user_tables  

    all_tables

    dba_tables

     

    oracle table은 DB buffer cache가 아닌, shared pool의 Dictionary cache영역에 저장된다

    row 단위로 cache를 저장한다

     

    4. 서버 결과 캐시

    result cache는 결과를 저장해두고 그 결과 그대로 user에게 제공한다.

    사용하려면 hint를 주면됨. ex) /* + result-cache */

     

     

     

     

    Database Buffer Cache (DB_CACHE_SIZE)

     

    📌 Database Buffer Cache 란?

    Physical Read 감소시키고 여러 서버가 Logical Read로 바로 사용가능하도록. 버퍼 공유하도록 하는 것이 버퍼캐시의 목적임.

    일반적으로 쿼리를 수행하면, Data File에서 Physical Read하여 결과를 Database Buffer Cache로 불러옴

    이를 서버프로세스(=유저)에게 Logical Read하여 결과값을 보여줌.

    Physical Read한 결과를 버퍼캐시에 저장해두었으니, 해당 조회결과를 다시 조회해야할 때, Physical Read를 다시 하지 않고 Logical Read로 바로 읽을 수 있음.

     

    특징

    * Buffer 상태

    1) Free : Empty

    2) Pinned : 수행중인 명령어가 이용하는 중

    3) Clean : Buffer와 File의 내용이 동일

    4) Dirty : 명령이 수행된 결과 buffer의 내용과 File의 내용이 다름

     

    * LRU List : Buffer Header List 양끝이 MRU, LRU로 관리됨

    즉, fifo가 아닌, 최근 안쓴 것 제거 방식. 

     

    - Checkpoint Queue : 변경된 순서대로 dirty buffer의 list가 관리됨

     

     

     

     

     

     

    Redo Log Buffer (LOG_BUFFER)

     

     

     

    특징

    변경(DML, DDL)시 바뀌게 될 값을 기록 - 순환적, 순차적으로 Server Process가 기록

     

     

     

     

    Large Pool (LARGE_POOL_SIZE)

     

     

    특징

    Shared Server UGA I/O 서버 프로세스 데이터베이스 백업 및 복원 작업시

     

     

     

     

     

     

    In-Memory Area

     

     

     

     

     

     

    Memoptimize Pool

     

     

     

     

    📌 Memoptimize Pool이란?

    Hash Index + Buffers로 구성됨.

    - 버퍼캐시와 동일하지만, aging out이 없음. 메모리에 계속 keeping해둠.

    즉, In-memory hash index 를 이용하여 빠른 key lookup을 제공

    그렇기때문에 조회 빠름

    - 사용방법

    MEMOPTIMIZE_POOL_SIZE

    테이블 레벨에서 설정이 필요함. 

    단, 반드시 PK가 반드시 있어야함

     

     

     

     

     

     

    PGA(Program Global Area)

     

    📌PGA란?

    서버 각각 각자 사용하는 영역.

    user가 session 생성하면서 PGA가 생성됨

    명령어 받자마자 cursor stack영역에 private SQL area 생성함. 이를, 해당 영역을 포인트로 잡고 있어서 이를, cursor 라고함.

    이후, SGA의 shared SQL area에 해당 정보가 있으면 가져다 써. 

    aging되지 않도록 shared SQL area에 포인터로 잡아둬. 이를, shared cursor 라고 함.

     

    📌구성

    1. Stack Space : 서버 프로세스 정보

    2. Session Memory : 세션정보

    3. Cursor Stack : 서버가 활동 안하면, 비어있다가, user명령어 받자마자 parse단계 이전에, private SQL area 생성.

    4. SQL Work Area : 해당 영역에서 sorting 작업 이루어짐. 줄세우기!! sorting하려는데 영역 부족하면? 쪼개서 tempfile에 임시중간결과 저장해두며 sorting함. 

     

    * UGA

    Session + Cursor + SQL work Area로 구성됨

     

     

     

     

     

    Background Processes

     

     

     

    1. Database Writer Process(DBWn)

     

     

    📌 특징

    - server 가 변경한 dirty buffer 를 datafile 에 기록

    - db_writer_processes : 100 까지 지정가능(CPU 숫자에 따라)

    - Checkpoint : DBWn가 dirty buffer를 datafile에 기록하는 작업

     

    📌 Checkpoint 누가한다고요?

    DBWR : 메인

    LGWR : 조연

    CKPT : 스텝정도.. 

     

    📌 Checkpoint  발생시기

    1) DB정상종료시

    shutdown시, DB Buffer Cache에서 dirty버퍼 빨리 DataFile로 내려ㅡㅡ!!

    내리기 전에, DBWR가 Log먼저 확인함. LGWR이 Redo Log File에 내린 거 확인 후, DBWR이 Datafile로 내린다.

     

    이후 접속시, 모든 데이터 파일의 SCN을 확인해서 CKPT, DBWR, LGWR 모두 정상적으로 동기화됐구나 확인함.

     

    2) Log Swtich시

    Redo Log File은 1개로 사용하면 안됨. 꼭 2개 두고 사용해야함.

    첫번째 로그파일 꽉 차서 두번째 로그파일로 넘어갈때

    Checkpoint가 발생됨.

     

    Drity Buffer가 미처 못 내려갔는데, 복구해야하면? 

    Redo Log File이 필요하다.

    그런데, Buffer에서 Data File에 안전하게 내려가있는 상태면?

    Redo Log File 필요 없어. Dirty버퍼 내리면 됨!

     

    3) 90% of the size of the smallest redo log file

    Incremental CheckPoint

    900초 분량의 recovery 공간만 남ㄴ겨두고 분량 조절함.

     

    fast_start_io_target

     

     

     

     

    Log Writer Process(LGWR)

     

     

     

    혼자 일할 때, 병목현상 잦아짐.

    로그파일 꽉 찼는데, DBWR이 너무 느려서 DataFile로 아직 못 내렸어.

    근데 계속 작업을 수행하면 log 쌓여야하는데

    로그파일 용량이 꽉 찼는데 복구하려면 다 저장해둬야하는데 아직 백업못한 정보들 있으니까 지우지도 못하고 멈춰있는거지..

    로그가 제때 안 내려오면 시스템 멈춤 발생함

     

    기록시점

    1) commit 명령수행

    2) log buffer가 1/3이상 or 1M 채워졌을 때

    3) DBWR의 시그널에 의해

    4) 3초간격

     

     

     

    Checkpoint Process(CKPT)

     

     

     

     

     

     

     

     

     

     

    System Monitor Process(SMON) startup > Instance Stated > 

    1. Instance Recovery수행함

    이때, RedoLogFile이 필요함

    Rolling Forward  : 가장 오래된 거 부터 순서대로 로그정보 재연.

    2. Temporary segment 처리

     

     

     

    Process Monitor(PMON)

     

     

    갑자기 user process 정상 logout 못하고 사라진 상황이 발생하면?

    1. Lock 걸림. 배타Lock

    2. 리소스문제 발생

    명령 내리는 user는 사라졌는데, process와 SGA는 잡고있음.

    불필요하게 리소스 잡고 있음.

     

    -> PMON이 해당 문제를 해결함

    Transaction rollback해서 Lock 해결

    PGA deallocate 뺏고 좀비상태로 만듦. kill해서 죽이면 됨.

     

     

     

     

    Listener Registration Process(LREG)

     

    LREG ? 

    Listener 에게 DB instance, dispatcher 의 정보를 정기적으로 알려줌

     

     

     

     

     

    Recover Process(RECO)

     

     

    - 분산 DB 환경에서 원격DB쪽의 중단된 transaction 작업을 cleanup

    즉, 분산 Trasaction의 중단된 작업 Rollback

    - A DB에서 B DB로 접근하기 위한 링크

     

     

    반응형
Designed by Tistory.