본문 바로가기

스터디69

04.라이브러리 캐시 최적화 원리 - 11.Static SQL 구현을 위한 기법들 Dynamic SQL을 자주사용하게되는 두번째 사례는 조건절에 IN-LIST 항목이 가변적으로 변할때 입니다. 여기서 소개하는 사례들은 Dynamic SQL로 작성하더라도 생성될 수 있는 최대 SQL개수가 그다지 많지 않기 때문에 라이브러리 캐시에 그렇게 많은 부하를 주지는 않습니다. 문제는 이런저런 이유로 Dynamic SQL을 사용하는 순간 조건절 비교 값까지 습관적으로 literal 상수값을 사용하도록 개발한다는 데에 있습니다. 그런 뜻에서 꼭 필요한 경우가 아니라면 가급적 Static SQL로 작성하는 습관과 능력을 기를 수 있도록 몇 가지 사례를 소개하겠습니다. (1)IN-LIST항목이 가변적이지만 최대 경우 수가 적은 경우 Static 방식으로 3가지 회원을 선택하는 경우 7가지 SQL을 미리.. 2020. 1. 20.
04.라이브러리 캐시 최적화 원리 - 10. Dynamic SQL 사용 기준 (1)Dynamic SQL 사용에 관한 원칙 - Static SQL을 지언하는 개발환경이라면 Static SQL로 작성하는 것을 원칙으로 합니다. Static SQL은 Precompile 과정을 거치므로 런타임 시 안정적인 프로그램 build가 가능하다는 장점이 있습니다. 그리고 Dynamic SQL을 사용하면 애플리케이션 커서 캐싱기능이 작동하지 않는 경우가 있는데, 이 기능이 필요한 상황(예를 들면, 루프 내에서 반복 수해되는 쿼리)에서 Dynamic SQL을 사용하면 성능이 나빠지기 때문입니다. 아래의 경우에는 Dynamic SQL을 사용해도 무방합니다. - Precompille 과정에서 컴파일 에러가 나는 구문을 사용할 때, 예를 들어 Pro*C에서 스칼라 서브쿼리,분석함수,ANSI 조인 등 - .. 2020. 1. 19.
04.라이브러리 캐시 최적화 원리 - 09.Static vs. Dynamic SQL 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을 런타임 시.. 2020. 1. 17.
04.라이브러리 캐시 최적화 원리 - 07.세션 커서 캐싱, 08.애플리케이션 커서 캐싱 07. 세션 커서 캐싱커서를 공유할 수 있는 형태로 SQL을 작성하면 하드파싱을 최소화해 궁극적으로 시스템 확장성을 높일 수 있습니다. 그런데 하드파싱을 하지 않더라도 SQL구문을 분석해서 해시 값을 계산하고, library cache래치를 획득한 후 라이브러리 캐시에서 커서를 탐색하는 과정 자체도 부담스러운 작업입니다.(소프트파싱) 특히 SQL 동시 수행이 많을 때는 경합까지 발생하므로 시스템에 부하를 주게 됩니다. 당연한 이야기이지만 SQL수행횟수가 높을 때 파싱관련 경합도 함께 증가합니다. 하지만 파싱경합을 줄여서 라이브러리 캐시 효율을 높이기 위해서는 SQL수행횟수를 줄여야 할까요? 아닙니다. 이것은 근본적 해결은 아닙니다. Shared Pool에 위치한 공유 커서를 실행하려고 PGA로 인스턴스화.. 2020. 1. 16.