본문 바로가기
스터디/오라클 성능고도화 원리와 해법1

04.라이브러리 캐시 최적화 원리 - 09.Static vs. Dynamic SQL

by 취미툰 2020. 1. 17.
반응형

Static 과 Dynamic SQL의 용어를 제대로 확인해보도록 하겠습니다.
(1)Static SQL
String형 변수에 담지 않고 코드 사이에 직접 기술한 SQL문을 말합니다. 다른말로 embedded SQL이라고 합니다.

(2) Dynamic SQL
String 형 변수에 담아서 기술하는 SQL문을 말합니다.
String변수를 사용하므로 조건에 따라 sql문을 동적으로 바꿀 수 있고, 또는 런타임 시에 사용자로부터 SQL문의 일부 또는 전부를 입력받아서 실행할 수도 있습니다.

Toad,Orange,SQL*Plus과 같은 Ad-hoc쿼리 툴에서 작성하는 SQL은 모두 Dynamic SQL이라고 볼 수 있습니다. 이들 툴이 컴파일되는 시점에 sql이 확정되지 않았으며 사용자가 던지는 SQL을 런타임 시에 받아서 그대로 DBMS에 던지는 역할만 할 뿐입니다.
Static SQL을 지원하는 개발언어는 Powerbuilder,PL/SQL,Pro*C,SQLJ정도가 있습니다.

지금까지 설명한 static,dynamic SQL은 애플리케이션 개발 측면에서의 구분일 뿐이고 데이터베이스 입장에서는 차이가 없습니다. 어떤것을 사용하든 오라클 입장에서는 던저진 SQL그 자체만을 인식할 뿐이고 Staitc SQL을 사용하여 애플리케이션 커서 캐싱 기능을 활용하고자 하는 경우 외에는 성능에도 전혀 영향이 없습니다.
따라서 라이브러리 캐시 효율을 논할때 가장 중요한 것은 바인드변수 사용여부입니다.
바인드 변수를 사용하지 않고 literal값을 SQL문자열에 결합하는 방식으로 개발했을떄, 반복적인 하드파싱으로 성능이 얼마나 저하되는디, 그리고 그 때문에 라이브러리 캐시에 얼마나 심한 경합이 발생하는지가 더욱 중요한 문제입니다.

(이번 절을 공부하면서 저는 개발언어가 많이 나와서 모르는 부분이 많았습니다.. 결론적으로 DB의 입장에서는 static이든 dynamic이든 상관없지만, 개발의 입장에서는 어떻게 사용하느냐가 중요한 문제인 것 같습니다.)

반응형

댓글