DA/튜닝

[DA] Static SQL 과 Dynamic SQL

bbugge 2019. 6. 7. 15:13

많은 이들이 Static SQL 과 Dynamic SQL을 혼동하여 지칭해서 'SQL 전문가 가이드' 책의 내용을 빌어 글을 작성해봅니다.

 

- Static SQL

  Static SQL은 String 변수에 담지 않고 코드 사이에 직접 기술한 SQL문을 말합니다.

Pro*C로 작성한 코드

위 캡처 사진과 같이 변수에 담지 않고 바로 실행했을 때의 SQL을 의미합니다.

많은 트랜잭션이 몰리는 증권이나 금융 쪽 DB에서는 Static SQL로 작성한다고 합니다.

'친절한 SQL 튜닝' 이나 '오라클 성능 고도화 원리 2'에서 옵션 조건을 중요시 다루는 이유가 바로 여기에 있다고 볼 수 있습니다. - 조시형 강사님曰

 

- Dynamic SQL

  Dynamic SQL은 String 변수에 담아서 기술하는 SQL문을 말합니다.

  즉, Application(Orange, Toad, Mybatis 등)에서 사용되는 모든 쿼리는 Dynamic SQL이라고 말할 수 있습니다.

Pro*C로 작성한 코드

위와 같이 'select_stmt'라는 char형 변수에 쿼리문을 담아 실행했을 때의 SQL을 의미합니다. 

 

※ Dynamic SQL은 캐싱되지 않는다??

   Dynamic SQL 중에서도 위와 같이 :empno 변수처럼 변수를 사용하지 않고 값을 숫자로 넣는다면 들어오는 문장마다 *하드 파싱을 진행해야 합니다.

   한 개의 Application *커서가 한 개의 Session 커서를 바라보는 것이 아닌,

   여러 개의 Application 커서가 생성이 되고 여러 개의 Session 커서를 바라보는 것.

 

 

 

 

※ Soft Parsing(소프트 파싱) & Hard Parsing(하드 파싱)

   Soft Parsing : SQL과 실행계획을 캐시에서 찾아 곧바로 실행단계로 넘어가는 경우를 말함.

   Hard Parsing : SQL과 실행계획을 캐시에서 찾지 못해 최적화 과정을 거치고 나서 실행단계로 넘어가는 경우를 말함.

   * 자세한 내용 : https://chess-drive.tistory.com/4

 

 

 

※ 커서

   Shared(공유) 커서 : SGA내에 Shared Pool 영역에 존재하는 라이브러리 캐시에 공유돼있는 Shared SQL Area에 저장된 커서

   Session(세션) 커서 : PGA내에 Private SQL Area에 저장된 커서

   Application(어플리케이션) 커서 : 세션 커서를 가리키는 핸들