Contents

!이미지 012.jpg!

딕셔너리 캐시

  • 오라클 딕셔너리 정보를 저장해 두는 캐시영역으로서 Row단위로 읽고 쓰기 때문에 '로우 캐시' 라고도 불린다.
  • 테이블, 인덱스, 테이블스페이스, 테이터파일, 세그먼트, 익스텐트, 사용자, 제약, Sequence, DB Link에 관한 정보를 캐싱한다.
  • 딕셔너리 캐시의 활동성에 대한 통계를 조회해 볼 수 있는 뷰가 v$rowcache인데 여기서 히트를 조사했을 때 수치가 낮게 나오면
    Shared Pool 사이지를 늘리는 것을 고려해 볼 필요가 있다.
  • v$rowcache

!이미지 014.jpg!

  • cache hit

!이미지 015.jpg!

!이미지 017.jpg!

  • V$ROWCACHE 에서 TYPE = 'PARENT'인 엔트리와 V$LATCH_CHILDREN 에서 row cache objects 인 래치 개수를 조회해 보면, 항상 값이 일치하는 것을 알 수 있다.
    로우 캐시에 관리되는 엔트리 각각에 대해 하나의 래치가 할당돼 있음을 있음을 짐작 할 수 있다.

!이미지 018.jpg!

라이브러리 캐시

  • DB 버퍼 캐시, Redo 로그 버퍼 캐시, 딕셔너리 캐시 등은 데이터의 입출력을 빠르게 하기 위한 캐시영역인 반면 라이브러리 캐시는 사용자가
    던진 SQL과 그 실행 계획을 저장해 두는 캐시영역이다. 사용자가 SQL이라는 명령어를 통해 결과집합을 요청하면 이를 최적으로수행하기 위한 처리
    루틴이 필요한데, 이걸 실행 계획이라고 한다. 빠른 쿼리 수행을 위해 내부적으로 생성한 일종의 프로시져 같은 것이라고 이해하면 쉽다
  • 소프트 파싱
    • SQL 수행시 Library Cache에 Latch 를 획득하고 수행하려는 sql 실행 정보가 있는지 검색한다.
    • SQL 이 존재할시 SQL 실행정보의 생성을 거치지 않고 바로 실행할수 있다.
  • 하드 파싱
    • Library Cache에 존재하지 않는 SQL 이라면 SQL 실행정보를 만들어 실행 정보를 저장해야 한다.
    • Shard Pool Latch 를 획득하여 저장공간을 확보한다.
    • 저장공간에 SQL 문과 실행계획 등의 정보가 저장 되고 이렇게 생성된 SQL 실행정보를 통해 SQL이 수행된다.

참고

  • 엑셈 만화 Aster 와 함께하는 Oracle Event Tour Scene 2.SQL 파싱
  • Oracle 11g Architechure