소프트 파싱 vs 하드 파싱
라이브러리 캐시
- SQL 파싱, 최적화, 로우소스생성 과정을 거쳐 생성한 내부 프로시저를 반복 재사용할 수 있도록 캐싱해 두는 메모리 공간을 ‘라이브러리 캐시'라고 한다.
- 라이브러리 캐시는 SGA의 구성요소이다. 하나의 쿼리를 수행하는데 있어 후보군이 될만한 무수히 많은 실행경로를 도출하고, 짧은 순간에 딕셔너리와 통계정보를 읽어 각각에 대한 효율성을 판단하는 과정은 결코 가벼울 수 없다. 이렇게 어려운 작업을 거쳐 생성한 내부 프로시저를 한번만 사용하고 버린다면 이만저만한 비효율이 아니기 때문에 라이브러리 캐시가 필수적이다.
- SGA(System Global Area) : 서버 프로세스와 백그라운드 프로세스가 공통으로 엑세스하는 데이터와 제어 구조를 캐싱하는 메모리 공간이다.
- PostgreSQL은?
- Shared Memory 라는 공간이 SGA와 유사함.
- 캐시에서 찾으면 곧바로 실행 단계로 넘어가지만, 찾지 못하면 최적화 단계를 거친다.
- 실제 SQL 문은 대소문자를 구분하지 않지만, 캐싱된 쿼리 값을 반환받기 위해서는 대소문자 까지 같아야 한다.
- 소프트 파싱 : SQL을 캐시에서 찾아 곧바로 실행단계로 넘어가는 것
- 하드 파싱 : 찾는데 실패해 최적화 및 로우 소스 생성 단계까지 모두 거치는 것
바인드 변수의 중요성
이름없는 SQL
- 사용자 정의 함수/프로시저는 내용을 수정해도 이름이 변하지 않으므로 같은 프로그램이 무한 생성되지 않는다. 그런데 SQL은 이름이 따로 없기 때문에 텍스트 중 작은 부분이라도 수정되면 그 순간 다른 객체가 새로 탄생하는 구조이다.
- 일회성 또는 무효화된 SQL까지 모두 저장하면 많은 공간이 필요하고, 그만큼 SQL 속도도 느려진다. ⇒ SQL 을 영구저장하지 않는 이유
공유 가능 SQL
- 파라미터 Driven 방식으로 작성하게되면 하드파싱은 최초 한번만 일어나고, 캐싱된 SQL을 재사용할 수 있다.
반응형
'Book & Lecture Review > 친절한 SQL 튜닝' 카테고리의 다른 글
인덱스 확장 기능 사용법 (0) | 2022.05.11 |
---|---|
인덱스 기본 사용법 (0) | 2022.05.11 |
인덱스 구조 및 탐색 (0) | 2022.05.11 |
SQL 데이터 저장 구조 및 I/O 메커니즘 (1) | 2022.05.04 |
SQL 파싱과 최적화 (2) | 2022.05.04 |