본문 바로가기

스터디/오라클 성능고도화 원리와 해법141

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.
04.라이브러리 캐시 최적화 원리 - 03.라이브러리 캐시 구조 라이브러리 캐시는 Shared Pool 내에 위치하며, SQL 공유 커서 및 데이터베이스 오브젝트(테이블,인덱스)에 대한 정보를 관리합니다. 그리고 여기에 저장되는 정보의 단위를 라이브러리 캐시 오브젝트(LCO)라고 부릅니다. SQL 커서 뿐만 아니라 컴파일을 거친 프로시저, 함수, 패키지, 트리거 등 PL/SQL프로그램을 담는 PL/SQL Area도 라이브러리 캐시에 저장합니다. (실행가능 LCO) 뿐만 아니라 거기서 참조하는 테이블,인덱스, 클러스터 같은 데이터베이스 오브젝트 정보들도 동등하게 하나의 오브젝트로써 관리됩니다.(오브젝트 LCO) 스키마 오브젝트 정보는 데이터 딕셔너리 캐시에도 캐싱돼 있는데 라이브러리 캐시에 중복 저장하는 이유가 무엇일까요. 라이브러리 캐시에 스키마 오브젝트 정보를 캐싱.. 2020. 1. 10.
04.라이브러리 캐시 최적화 원리 - 01.SQL과 옵티마이저, 02.SQL처리과정 01.SQL과 옵티마이저 옵티마지어가 내장된 DBMS를 사용한다면 개발자가 프로시저를 직접 코딩할 필요없이 옵티마이저가 대신해서 프로그래밍해주고 프로시저를 생성해 줍니다. 예를들어, 아래와 같은 쿼리를 작성해서 결과값을 리턴받았다고 가정할때 예전에는 두 개 테이블을 조인해 사용자가 원하는 결과집합을 얻으려면, 기준 테이블을 select하고 한 건씩 fetch하면서 반대편 테이블로부터 조인 레코드를 seek하는 과정을 루핑을 통해 반복 수행하는 프로시저를 직접 개발했었어야 했습니다. 하지만 옵티마이저가 우리를 대신해 프로그래밍 해주게되고 프로시저가 자동으로 생성되는 것입니다. select e.ename,e.job,d.dname from emp e, dept d where d.deptno=e.deptno a.. 2020. 1. 9.