기술 정보
home
채널 소개
home

바인드 변수 SQL, 리터럴 SQL 개념 비교

문서 유형
기술 정보
분야
튜닝
키워드
Literal SQL
Bind Variable
1 more property

개요

리터럴 SQL(Literal SQL) 과 바인드 변수 SQL(Bind Variable SQL)의 차이를 정리하고, 하드 파싱(Hard Parsing)과 소프트 파싱(Soft Parsing) 개념을 함께 설명합니다.
리터럴 SQL을 많이 사용하면 하드 파싱(Hard Parsing) 빈도가 높아지고, Library Cache에서 SQL이 자주 교체되면서 성능에 불리합니다. Shared SQL Area 의 SQL 문 중에서 리터럴 SQL 문들을 찾아서 바인드 변수(Bind Variable)을 이용한 방법으로 바꾸어야 성능 향상에 도움이 됩니다.

방법

SQL 개념 비교

리터럴 SQL(Literal SQL)
리터럴 SQL은 WHERE 절 비교 값에 숫자나 문자열을 직접 하드코딩한 SQL입니다.
바인드 변수 SQL(Bind Variable)
바인드 변수 SQL WHERE 절의 값을 하드코딩하지 않고 바인드 변수(:B)로 지정한 SQL입니다.

파싱(Parsing) 개념 비교

하드 파싱(Hard Parsing)
SQL문장이 처음 실행 되는 경우에 Shared Pool/Library Cache에 없는 경우, 완전히 전부 새로 파싱을 한다는 의미입니다.
티베로는 Shared Pool 에 새로운 SQL 문장을 할당하며 SQL 문법 검사·객체 존재 여부·권한 검사 등을 수행하며 CPU와 Spin Lock 사용량이 크게 증가합니다.
소프트 파싱(Soft Parsing)
실행하고자 하는 SQL 문장이 이미 Shared Pool/Library Cache 에 존재하는 경우, 기존 파싱 결과(파싱 트리, 실행계획)를 재사용합니다. 그렇기에 대부분의 SQL 문장 실행 시간은 처음보다 두번째가 빠르다.

하드 파싱 대상 SQL 문장

소프트 파싱이 일어나려면 SQL 문장이 완전히 동일해야 합니다. 다음과 같은 경우에는 하드 파싱 대상이 됩니다.
완벽하게 동일한 SQL 문장이라도 테이블이 속한 스키마가 다른 경우 다른 SQL 문장으로 간주합니다. ex) A 유저 로그인하여 A 스키마의 EMP 테이블 조회: 'select * from emp' B 유저 로그인하여 B 스키마의 EMP 테이블 조회: 'select * from emp'
SQL 문장의 공백이 다른 경우 다른 SQL 문장으로 간주합니다. ex) 'select * from emp' 문장과 'select * from emp' 문장은 다릅니다.
같은 SQL 문장이라도 라인이 다른 경우 ex) 'select * from emp' 문장과 'select * from emp' 문장은 다릅니다.
대소문자가 다를 때 ex) 'select * from emp' 문장과 'select * from EMP' 문장은 다릅니다.