SQL 처리 과정과 I/O 복습

Jayson·2025년 3월 5일
post-thumbnail

SQL 최적화 복습

이번에는 1장에서 학습한 내용을 돌아보며, 중요한 개념과 처음 느꼈던 점들을 정리해보려 한다.

작년 겨울, 한 컨퍼런스에서 성장하는 방법에 대한 이야기를 들은 적이 있다. 그중 기억에 남는 말이 "학습한 정보를 일부러 어렵게 떠올리는 연습을 하면 기억이 더 오래 남는다."는 것이었다. 지금 복습하는 과정도 마찬가지다. 이전에 배운 내용을 다시 떠올리고 정리하면서, 더 깊이 이해하고 오래 기억할 수 있도록 해보려 한다.

먼저, SQL 성능을 개선하기 위해 꼭 기억해야 할 핵심 개념을 정리하고, 이에 대한 설명을 덧붙여 보겠다.


SQL 최적화에서 가장 중요한 점

  1. SQL 실행 성능을 결정하는 가장 중요한 요소는 I/O이다.

    • SQL이 느려지는 가장 큰 이유는 디스크 I/O 병목 때문이다.
    • I/O 최적화 = SQL 튜닝이라고 해도 과언이 아니다.
  2. SQL 실행 과정에서 옵티마이저의 역할이 핵심이다.

    • SQL 실행 전 옵티마이저(Optimizer) 가 최적의 실행 계획을 선택한다.
    • 실행 계획을 분석하면 SQL이 어떻게 실행될지 예상할 수 있다.
  3. 하드 파싱을 최소화하고 SQL 공유 및 재사용이 중요하다.

    • 소프트 파싱을 늘리기 위해 라이브러리 캐시 활용
    • 바인드 변수를 사용하여 동일 SQL을 공유해 불필요한 최적화 비용을 줄인다.
  4. 인덱스가 항상 정답은 아니다.

    • 소량 데이터 조회에는 인덱스를 사용하는 것이 좋다. (Single Block I/O)
    • 대량 데이터 조회에는 Table Full Scan이 더 효율적일 수 있다. (Multiblock I/O)
    • 인덱스 조회가 무조건 빠르다고 맹신하지 말자!
  5. 버퍼 캐시를 활용한 논리적 I/O 최적화가 중요하다.

    • 디스크 I/O를 줄이려면, 논리적 I/O를 먼저 줄여야 한다.
    • DB 버퍼 캐시를 활용하여 자주 조회하는 데이터를 메모리에 유지

SQL 실행 과정 요약

  1. SQL 파싱 → 문법·의미 분석 및 파싱 트리 생성
  2. SQL 최적화 → 실행경로 후보 비교 후 최적 실행계획 선택
  3. 로우 소스 생성 → 실행계획을 실제 실행 가능한 코드로 변환
  4. 실행계획 확인 → 예상 비용과 실행 방식 검토 가능
  5. 옵티마이저 힌트 사용 (필요시) → 최적 실행을 위해 강제 경로 지정

SQL 성능 최적화를 위해

  1. 소프트 파싱 비율을 높이기 위해 라이브러리 캐시 활용
  2. 하드 파싱을 최소화하기 위해 바인드 변수 사용
  3. 불필요한 SQL 변형을 줄이고 공유 가능한 SQL 구조 설계

SQL 실행 및 최적화 개념 정리

개념설명
데이터 블록 (Block)데이터를 읽고 쓰는 최소 단위
익스텐트 (Extent)공간을 확장하는 단위 (연속된 블록 집합)
세그먼트 (Segment)테이블, 인덱스, 파티션, LOB 등 데이터 저장공간이 필요한 오브젝트
테이블스페이스 (TableSpace)세그먼트를 담는 컨테이너
데이터파일 (Data File)디스크 상의 물리적인 OS 파일

Single Block I/O vs Multiblock I/O

  • Single Block I/O : 한 번의 I/O Call로 한 개 블록만 읽음 (인덱스 조회에 적합)
  • Multiblock I/O : 한 번의 I/O Call로 여러 개의 블록을 읽음 (테이블 풀 스캔에 적합)

Table Full Scan vs Index Range Scan

  • Table Full Scan : 테이블 전체 블록을 연속적으로 읽음 (Multiblock I/O 사용).
  • Index Range Scan : 인덱스를 통해 필요한 블록을 개별적으로 접근 (Single Block I/O 사용).

소량 데이터 조회 → 인덱스 활용 (Single Block I/O) 대량 데이터 조회 → Table Full Scan + Multiblock I/O 활용


최적의 SQL 튜닝 전략

I/O를 최소화하는 것이 SQL 성능 최적화의 핵심!
논리적 I/O 자체를 줄여야 물리적 I/O도 줄일 수 있음.
작은 데이터 조회 → 인덱스 활용 (Single Block I/O)
대량 데이터 조회 → Table Full Scan + Multiblock I/O 활용
버퍼캐시 활용도를 높이고, 캐시 경합을 최소화하는 SQL 튜닝 필요.

SQL 성능 최적화 = I/O 최적화!

profile
Small Big Cycle

0개의 댓글