친절한 SQL 튜닝 - 2일차

DevSeoRex·2022년 9월 27일
0

1.2 SQL 공유 및 재사용

1.2.1 소프트 파싱 vs 하드 파싱

SQL 파싱, 최적화, 로우 소스 생성 과정을 거쳐 생성한 내부 프로시저를 반복 재사용할 수 있도록 캐싱해 두는 메모리 공간을 '라이브러리 캐시'라고 한다.

SGA(System Global Area)는 서버 프로세스와 백그라운드 프로세스가 공통으로 엑세스하는 데이터와 제어 구조를 캐싱하는 메모리 공간이다.

SQL문의 실행 과정은

사용자가 SQL문을 전달 -> DBMS가 SQL을 파싱 -> 해당 SQL이 라이브러리 캐시에 존재하는지 확인 -> 존재한다면 곧바로 실행(존재하지 않을 경우 최적화 단계를 거침)

SQL을 캐시에서 찾아 곧바로 실행단계로 넘어가는 것을 소프트 파싱 이라고 하고, 찾는 데 실패해 최적화 및 로우소스 생성 단계까지 모두 거치는 것을 하드 파싱 이라고 합니다.

SQL 옵티마이저는 순식간에 순식간에 많은 연산을 한다. 이 과정에서 옵티마이저가 사용하는 정보는 다음과 같다.

  • 테이블, 컬럼, 인덱스 구조에 관한 기본 정보
  • 오브젝트 통계
  • 시스템 통계
  • 옵티마이저 관련 파라미터

1.2.2 바인드 변수의 중요성

  1. 이름 없는 SQL 문제

SQL도 사용자 정의 함수/프로시저 처럼 영구 저장할 순 없을까?
실제로 그렇게 하고 있는 DBMS도 있다.

일회성 또는 무효화된 SQL까지 모두 저장하려면 많은 공간이 필요하고, 그만큼 SQL을 찾는 속도도 느려진다. 오라클, SQL Server 같은 DBMS가 SQL을 영구 저장하지 않는 쪽을 선택한 이유다.

바인드 변수를 사용하면 SQL에 대한 하드파싱은 최초 한 번만 일어나고, 캐싱된 SQL을 공유하면서 재사용할 수 있다

출처 : 친절한 SQL 튜닝(디비안 : 조시형 저)

0개의 댓글