SQL 공유 및 재사용

운구름·2022년 5월 1일
0
post-thumbnail

소프트파싱과 하드파싱 차이점과, 바인드 변수의 중요성을 알아보자

소프트파싱과 하드파싱

앞의 SQL 최적화를 마치면, 만들어진 내부 프로시저를 재사용 할 수 있도록 '라이브러리 캐시'에 캐싱한다. 라이브러리 캐시는 SGA 구성요소이다.

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

DBMS는 쿼리를 파싱한 후 라이브러리 캐시에 관련 프로시저가 있는지 확인한다.
캐시에서 프로시저를 찾으면 바로 실행하지만 없다면 최적화를 진행한다.

  • SQL을 캐시에서 찾아 바로 실행 단계로 가면 '소프트 파싱(Soft Parsing)'
  • SQL을 캐시에서 찾는것을 실패하고 최적화 단계를 모두 거치면 '하드 파싱 (Hard Parsing)'

라이브러리 캐시가 필요한 이유

쿼리를 실행하는데 옵티마이저는 엄청나게 수많은 연산을 거쳐 실행계획을 도출해낸다.
이 최적화 과정은 CPU를 많이 소비하는 무거운 작업이다. 이 작업을 매 실행마다 비효율적인 작업이기 때문에 라이브러리 캐시를 사용하여 이미 만든 프로시저를 사용해야 하는 것이다.

옵티마이저가 SQL 최적화에 사용하는 정보들 (책 내용 인용)

  • 테이블, 컬럼, 인덱스 구조에 관한 기본 정보
  • 오브젝트 통계 : 테이블 통계, 인덱스 통계, 컬럼 통계
  • 시스템 통계 : CPU 속도, Single Block I/O 속도, Multiblock I/O 속도 등
  • 옵티마이저 관련 파라미터

바인드 변수의 중요성

함수나 프로시저, 트리거, 패키지 등은 생성할 때 이름을 갖는다. 하지만 SQL은 이름이 없고 전체 SQL 텍스트가 이름 역할을 하고 딕셔너리에 저장도 안됨. 라이브러리 캐시에 이름없는 SQL 텍스트가 캐싱되어 있는데 상수값이 달라지면 다른 SQL로 판단하여 하드파싱한다.

하지만 바인드 변수를 사용하면 SQL을 변경하지 않고 라이브러리 캐시의 내부 프로시저를 그대로 사용할 수 있다.

바인드 변수는 아래와 같이 ? 에 파라미터로 값을 전달하는 변수이다.
SELECT * FROM EMP WHERE EMPNO = ?

profile
뭉실뭉실 코더 운구름

0개의 댓글