DBMS가 SQL을 처리하는 과정

씩씩한 조약돌·2025년 4월 19일
1

공부 기록✍️

목록 보기
38/40

📊 DBMS와 SQL 처리 과정 🛠️

1. DBMS와 SQL

  • DBMS (Database Management System): 데이터베이스 관리 시스템 (예: Oracle, MySQL, PostgreSQL 등)
  • SQL (Structured Query Language): DBMS에 명령을 내리기 위한 언어, 구조적이고 집합적이며 선언적인 질의 언어

2. DBMS가 SQL을 처리하는 과정

  1. 사용자가 SQL 입력
    사용자가 원하는 데이터를 찾기 위해 SQL을 작성
  2. SQL 분석 & 실행계획 생성
    SQL은 선언적으로 실행방법이 정해져 있지 않기 때문에 DBMS는 사용자가 작성한 SQL을 분석하여, 가장 효율적인 실행계획을 프로시저 형태로 자동 생성
  3. SQL 최적화
    실행계획을 컴파일하여 실제 실행 가능한 상태로 변환

⚙️ SQL 최적화 과정 🧑‍💻

  1. SQL 파싱
    • 파싱 트리를 생성하여 SQL의 각 구성 요소를 분석
    • SQL의 문법(Syntax)의미(Semantics)를 체크
  2. SQL 최적화
    • DBMS는 여러 실행계획을 평가하고 가장 효율적인 실행계획을 선택
  3. 로우소스 생성
    • 최적화된 실행계획을 실제 실행 가능한 코드나 프로시저 형태로 변환

🧠 소프트파싱 vs 하드파싱 🔄

  1. SGA (System Global Area)
    DBMS의 메모리 공간으로, 데이터베이스 인스턴스가 작동하는 동안 필요한 공유 메모리 구조

    • DB Buffer Cache: 디스크에서 읽어온 데이터를 저장하여, 반복적인 접근 시 성능을 높임
    • Shared Pool: 실행 계획, 파싱된 SQL, 데이터 딕셔너리 정보 등을 저장하여 동일한 SQL이 다시 실행될 때 성능을 향상
    • Redo Log Buffer: 트랜잭션 로그를 저장하여 복구에 활용
  2. 하드파싱(Hard Parsing)

    • SQL을 실행할 때, DBMS는 최적의 실행계획을 찾아야 함. 이 과정은 CPU 자원을 많이 사용하고, 실행계획을 새로 생성하는 하드파싱이 발생
    • 하드파싱이 끝난 후 실행계획은 Shared Pool의 라이브러리 캐시(Library Cache)에 저장되어, 재사용이 가능
  3. 소프트파싱(Soft Parsing)

    • 쿼리가 라이브러리 캐시에 이미 존재하면, DBMS는 실행계획을 재사용하여 최적화 없이 바로 실행.

💡 SQL 처리 속도가 느려지는 이유 🐢

  • SQL 처리 속도는 디스크 I/O(디스크에서 데이터를 얼마나 읽느냐)에 달려 있음

📊 논리적 I/O와 물리적 I/O의 개념 🧠

  • 논리적 I/O:

    • 데이터가 메모리에 이미 존재할 때 발생하는 I/O로, 디스크에서 데이터를 읽지 않고 메모리 내에서만 데이터를 처리합니다. 논리적 I/O는 디스크 액세스가 없으므로 속도가 빠름.
  • 물리적 I/O:

    • 데이터가 메모리에 없을 때, 즉 Buffer Cache에 데이터가 없을 때 발생하는 I/O로, 디스크에서 데이터를 읽어와야 하므로 디스크 액세스가 발생하고, 상대적으로 속도가 느림. 이 과정에서 데이터는 디스크 블록 단위로 읽혀 Buffer Cache에 적재.
  1. 사용자가 SQL을 실행하면
  2. 서버 프로세스SGA의 Buffer Cache를 확인
  3. 데이터가 캐시에 있으면: 논리적 I/O 발생
  4. 데이터가 캐시에 없으면: 디스크 I/O 발생하여, 디스크에서 블록 단위로 읽어와 Buffer Cache에 적재
  5. 읽은 블록에서 필요한 Row 추출
  6. 결과 반환

목표: 물리적 I/O를 최소화하고, 논리적 I/O를 최대화해야 성능을 최적화할 수 있음.


⚙️ I/O를 줄이는 방법 💨

  • 데이터를 적게 읽는 방법으로 I/O를 줄일 수 있음
  1. 인덱스 사용
    데이터를 빠르게 조회할 수 있도록 인덱스를 활용
  2. 적절한 조인 순서 및 방식
    쿼리의 조인 순서와 방식을 최적화하여 불필요한 데이터 조회를 줄임
  3. 실행계획 분석
    실행계획을 분석하여, 최적화되지 않은 부분을 찾아 개선

🧾 정리: DBMS는 SQL을 어떻게 실행할까?

DBMS는 사용자가 입력한 선언적 SQL 문을 아래와 같은 일련의 절차를 거쳐 실행합니다:

  1. SQL 파싱

    • 문법과 의미를 분석하여 파싱 트리를 생성합니다.
  2. 실행계획 최적화

    • 다양한 실행 방법 중 가장 효율적인 실행계획을 선택합니다.
  3. 실행계획 컴파일 및 실행 준비

    • 실행계획을 실제 실행 가능한 형태(로우 소스)로 변환합니다.
  4. 라이브러리 캐시 확인 (소프트파싱 여부)

    • 동일한 SQL이 이미 처리된 적이 있다면 소프트파싱을 통해 실행계획을 재사용합니다.
    • 없다면 하드파싱이 수행되어 새로운 실행계획을 생성합니다.
  5. 데이터 액세스 (논리적/물리적 I/O)

    • 필요한 데이터가 메모리(Buffer Cache)에 있으면 논리적 I/O,
    • 없으면 디스크에서 읽어오는 물리적 I/O가 발생합니다.
  6. 결과 반환

✅ 즉, DBMS는 SQL을 파싱 → 최적화 → 컴파일 → 실행의 단계를 거쳐 실행하며,
메모리 활용과 실행계획 재사용 여부, I/O 효율성이 성능에 결정적인 영향을 미칩니다.

출처 : 도서<친절한 SQL튜닝>

profile
씩씩하게 공부중 (22.11~)

0개의 댓글