성능고도화54 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. 04.라이브러리 캐시 최적화 원리 - 05.바인드 변수의 중요성, 06.바인드 변수의 부작용과 해법 05.바인드 변수의 중요성바인드 변수 사용에 따른 효과는 아주 분명하게 나타납니다. 커서를 많이 생성하지 않고 하나를 반복 재사용하므로 메모리 사용량과 파싱 소요시간을 줄여줍니다. 궁극적으로 시스템 전반의 메모리와 cpu 사용률을 낮춰 데이터베이스 성능과 확장성을 높이는데 기여하고, 특히 동시 사용자 접속이 많을 때는 그 영향력이 절대적입니다. 바인드 변수 사용 원칙을 잘 지키지 않으면 라이브러리 캐시 경합 때문에 시스템 정상가동이 어려운 상황에 직면할 수 있습니다. 그럴때 cursor_sharing 파라미터를 변경하는 것을 고려해 볼 수 있는데 이는 응급처방으로 사용해야지 절대 영구 적용할 목적으로 사용해서는 안됩니다. 06. 바인드 변수의 부작용과 해법바인드 변수를 사용하면 최초 수행할 때 최적화를 .. 2020. 1. 15. 04.라이브러리 캐시 최적화 원리 - 04.커서 공유 (1)커서란? 우리가 흔히 말하는 커서는 아래 3가지를 모두 일컫는 말입니다. 공유 커서(shared cursor): 라이브러리 캐시에 공유 돼 있는 shared SQL area 세션 커서(session cursor): Private SQL area에 저장된 커서 애플리케이션 커서(application cursor): 세션 커서를 가리키는 핸들 공유커서 java,vb,pro*c,pl/sql 등에서 sql을 수행하면 서버 프로세스는 해당 sql이 라이브러리 캐시에 공유돼 있는지를 먼저 확인합니다. 없으면 최적화 과정을 통해 실행계획을 만들고, 라이브러리 캐시에 공유합니다. 그렇게 라이브러리 캐시에 공유돼 있는 shared SQL area를 커서라고 부릅니다. 세션커서 라이브러리 캐시에 공유돼 있는 커서를 .. 2020. 1. 14. 이전 1 ··· 6 7 8 9 10 11 12 ··· 14 다음