[친절한 SQL 튜닝]1.2 SQL 공유 및 재사용 - SGA, 라이브러리 캐시, 하드파싱과 소프트파싱

Euiyeon Park·2025년 4월 14일

친절한 SQL 튜닝

목록 보기
2/13
post-thumbnail

1.2 SQL 공유 및 재사용

SQL 내부 최적화 과정의 복잡성을 알고나면,
동시성이 높은 온라인 트랜잭션 처리 시스템에서 바인드 변수가 왜 중요한지 알게 될 것 !

SGA(System Global Area)와 Library Cache

  • SGA : 여러 프로세스가 공통으로 액세스하는 데이터, 제어 구조를 캐싱하는 메모리 공간
  • Library Cache : 내부 프로시저를 반복 재사용할 수 있도록 캐싱하는 메모리 공간

라이브러리 캐시가 왜 필요한가?

  • SQL 최적화 과정은 빡세다(그래서 하드 파싱임)
    • 최적화 과정이란 무엇인가? 여러 실행 경로 중 최적의 경로를 비교 후 선택
    • 짧은 시간 내에 여러 정보를 이용해 수많은 연산 작업 - 무수히 많은 경우의 수가 존재
    • ✨ 옵티마이저는 어떤 여러 정보를 이용하는가?
      • 테이블, 컬럼, 인덱스 구조
      • 오브젝트 통계 : 테이블 통계, 인덱스 통계, 컬럼 통계
      • 시스템 통계 : CPU 속도, Single Block I/O 속도, Multi Block I/O 속도
      • 옵티마이저 관련 파라미터
  • 그렇게 빡센 과정을 거쳐 생성된 프로시저를 그냥 버릴 순 없기에 캐싱해둠
    (라이브러리가 필요한 이유)

소프트 파싱 / 하드 파싱

  • 사용자가 SQL문 전달 → SQL 파싱 → 라이브러리 캐시에 존재? → ⭕ 소프트 파싱, ❌ 하드 파싱
  • 소프트 파싱 : SQL을 캐시에서 찾아 바로 실행 단계
  • 하드 파싱 : SQL 파싱 이후 단계인 최적화와 로우소스 생성 단계를 거쳐 실행
  • 대부분 데이터베이스에서 이뤄지는 처리 과정은 I/O 작업에 집중되는 반면,
    하드 파싱의 경우 위와 같은 빡센 최적화 과정을 거치기에 CPU를 많이 소비하는 작업이다.

ref. https://product.kyobobook.co.kr/detail/S000001975837

profile
"개발자는 해결사이자 발견자이다✨" - Michael C. Feathers

0개의 댓글