본문 바로가기
Book & Lecture Review/친절한 SQL 튜닝

소프트 파싱 vs 하드 파싱

by iyos 2022. 5. 4.

 

소프트 파싱 vs 하드 파싱

라이브러리 캐시

  • SQL 파싱, 최적화, 로우소스생성 과정을 거쳐 생성한 내부 프로시저를 반복 재사용할 수 있도록 캐싱해 두는 메모리 공간을 ‘라이브러리 캐시'라고 한다.
  • 라이브러리 캐시는 SGA의 구성요소이다. 하나의 쿼리를 수행하는데 있어 후보군이 될만한 무수히 많은 실행경로를 도출하고, 짧은 순간에 딕셔너리와 통계정보를 읽어 각각에 대한 효율성을 판단하는 과정은 결코 가벼울 수 없다. 이렇게 어려운 작업을 거쳐 생성한 내부 프로시저를 한번만 사용하고 버린다면 이만저만한 비효율이 아니기 때문에 라이브러리 캐시가 필수적이다.
  • SGA(System Global Area) : 서버 프로세스와 백그라운드 프로세스가 공통으로 엑세스하는 데이터와 제어 구조를 캐싱하는 메모리 공간이다.
  •  PostgreSQL은?
    • Shared Memory 라는 공간이 SGA와 유사함.
  • 캐시에서 찾으면 곧바로 실행 단계로 넘어가지만, 찾지 못하면 최적화 단계를 거친다.
  • 실제 SQL 문은 대소문자를 구분하지 않지만, 캐싱된 쿼리 값을 반환받기 위해서는 대소문자 까지 같아야 한다.
  • 소프트 파싱 : SQL을 캐시에서 찾아 곧바로 실행단계로 넘어가는 것
  • 하드 파싱 : 찾는데 실패해 최적화 및 로우 소스 생성 단계까지 모두 거치는 것


바인드 변수의 중요성

이름없는 SQL

  • 사용자 정의 함수/프로시저는 내용을 수정해도 이름이 변하지 않으므로 같은 프로그램이 무한 생성되지 않는다. 그런데 SQL은 이름이 따로 없기 때문에 텍스트 중 작은 부분이라도 수정되면 그 순간 다른 객체가 새로 탄생하는 구조이다.
  • 일회성 또는 무효화된 SQL까지 모두 저장하면 많은 공간이 필요하고, 그만큼 SQL 속도도 느려진다. ⇒ SQL 을 영구저장하지 않는 이유

공유 가능 SQL

  • 파라미터 Driven 방식으로 작성하게되면 하드파싱은 최초 한번만 일어나고, 캐싱된 SQL을 재사용할 수 있다.
반응형