[Database] SQL 문장의 실행 원리


[Database] SQL 문장의 실행 원리


SQL문장의 실행 과정 정리

  1. User Process가 서버 위치 정보가 들어있는 tnsnames.ora를 참고해 해당 서버로 찾아감
    TNS(Transparent Network substrate) : 오라클에서 사용하는 기술로, Client/Server 또는 Server/Server간에도 Data의 전송을 가능하게 해주는 기술
    tnsnames.ora : 오라클 client측에서 오라클 서버로 접속할 때 필요한 프로토콜 및 포트번호, 서버주소, 인스턴스등을 설정해주는 파일로서 client쪽에 위치
  2. 서버 쪽 listener.ora 파일 안에 접속하려는 서버 IP가 있으면 리스너는 해당 Server Process를 불러옴
    listener.ora : 오라클 서버에서 클라이언트의 요청을 듣고, 클라이언트와의 통신 환경을 설정하는 파일
  3. User Process는 Server Process에게 수행해야할 쿼리 전달
  4. Server Process는 Parse -> Execute -> Fetch과정을 통해 쿼리 수행
    1. SQL문장을 받은 서버프로세스는 Syntax check, Semantic Check를 한후 권한 검사
      • 실행 계획이 있는 경우 : Execution 단계로 진행
      • 실행 계획이 없는 경우(=공유 X, Soft Parse실패) : 옵티마이저를 찾아가 실행계획을 찾아달라 함(Hard Parse)
  5. 작업이 끝나면 Server Process는 결과값은 User Processd에게 전달하고, User Process는 사용자에게 전달

주의할점

  • 오라클과 리스너는 서로 다른 프로그램이기 때문에 server는 켜져 있는데 listener가 죽어있는 경우도 있음 --> 신규 접속 불가능
  • 리스너는 새로 들어오는 client만 관리
    • 이미 들어와 있는 사용자는 리스너를 통하지 않고 바로 server process와 연결함
    • 리스너에 장애가 나면 전에 접속한 사람은 이용가능하지만, 신규 접속은 불가
< SQL 문장이 수행되는 과정 >
  • User Process : SQL을 작성하는 프로그램 
  • 권한검사 : 어떤 사용자가 해당 오브젝트에 접근 할 수 있는 권한 여부를 확인하는 과정
  • Library Cache : 한번이라도 실행된 SQL 또는 PL/SQL 문장과 해당 문장의 실행계획이 공유되 있는 공간
  • 옵티마이저 : 네비게이션 같은 프로그램, Data Dictionary 등을 참조하여 실행계획을 생성

SELECT문 실행 원리

Parse --> Execute --> Fetch

Parse (구문 분석)

  • Syntax Check 문법 검사 : 오라클 키워드 검사
  • Semantic Check 의미 검사 : 테이블이름이나 칼럼이름 검사
  • Shared Pool Check 권한 검사 : 해당 사용자가 이 테이블을 조회할 수 있는지 검사
  • 검사들은 Data Dictionary를 사용하게 되고, Data Dictionary를 캐싱해 두고 성능을 높여주는 곳이 Shared Pool안의 Dictionary Cache 또는 Row Cache
  • Shared Pool의 Library Cache를 검사한 후 공유되어 있는 실행계획이 있는지 검사
    • 있으면 바로 Execution 단계로 진행 -> Soft Parse 또는 커서 공유라고 함
    • 없으면 Optimizer를 찾아가서 실행 계획을 만들어 달라고 함 -> Hard Parse

Soft Parse
  • Library Cache안에 있는 커서 즉, 공유커서는 이미 한번 수행되었던 SQL문장의 실행계획과 관련 정보를 보관하고 있다가 재활용 함
  • Optimizer 가 실행계획을 만들어주는 부담을 줄이게 됨으로써 SQL의 수행 속도를 빠르게 함
Hard Parse
  • Optimizer는 실행 계획을 생성시켜주는 역할
  • 실행 계획을 세울 때 데이터 딕셔너리정보를 보고 판단
  • Optimizer가 실행 계획을 세워주는 대로 실행을 하기 때문에 SQL 수행 속도에 절대적인 영향


Execution(실행)

하드 디스크의 데이터 파일에서 데이터가 들어있는 블록을 찾아 메모리 즉, DB Buffer Cache로 복사해 오는 과정
  • 서버 프로세스가 해당 데이터를 가져오기 위해 해당 데이터가 저장되어 있는 블록을 찾게 됨
  • 찾는 모든 데이터는 Database Buffer Cache에 있어야 함
  • 서버 프로세스는 해당 블록을 찾기 위해서 우선 DB Buffer Cache를 확인하는데, DB Buffer Cache에 원하는 블록이 있으면 즉시 다음 단계인 Fetch단계를 진행
  • 없으면, 서버 프로세스가 하드 디스크로 가서 해당 블록을 찾아 DB Buffer Cache로 복사
    • 디스크에서 메모리로 복사해 오는 시간이 굉장히 오래 걸리는 편- > 성능에 영향

Fetch(인출)

  • DB Buffer Cache에 복사된 블록 중에서 사용자가 원하는 데이터만 골라내는 과정


출처

댓글

이 블로그의 인기 게시물

[Python] # -*- coding: utf-8 -*-를 쓰는 이유

[소프트웨어공학] NS(Nassi-Schneiderman) 차트

[컴퓨터네트워크] Telnet이란?