본문 바로가기

Oracle DB

(36)
Shared Pool / Library Cache와 OWI - Shared Pool과 힙 Shared Pool은 SGA의 Variable 영역에 속한다. Variable 영역은 Shared Pool + Java Pool + Large Pool + Streams Pool 등으로 이루어진다. Shared Pool은 다시 여러 종류의 메모리 영역으로 나누어진다. 대표적인 것들이 라이브러리 캐시와 로우 캐시이다. Shared Pool의 구성요소는 Permanent Area, Library Cache, Row Cache, Reserved Area로 구성된다. Shared Pool은 힙이라고 불리는 메모리 관리 기법을 이용해 관리된다. Shared Pool은 하나의 최상위 힙을 가지며, 최상위 힙은 다시 여러 개의 서브 힙을 포함한다. 힙은 여러 개의 익스텐트를 링크드 리..
버퍼캐시와 OWI - 버퍼캐시 구조 최근에 사용된 블록에 대한 정보를 메모리의 일정 부분에 저장해 놓은 것을 버퍼 캐시라고 한다. Database Buffers에 해당하는 값이 현재 인스턴스의 버퍼 캐시의 크기이다. 오라클은 버퍼 캐시를 효과적으로 관리하기 위해 해시 체인 구조를 사용한다. 버킷 -> 체인 -> 헤더의 구조를 사용한다. 해시 체인 구조는 cache buffers chains 래치를 이용해 보호된다. - Working Set 오라클은 버퍼 캐시를 효율적으로 사용하기 위해 두 종류의 LRU 리스트를 사용한다. LRU 리스트는 프리 버퍼, 사용 중이거나 사용된 버퍼, 더티 버퍼 등을 포함한다. LRUW 리스트는 아직 디스크에 기록되지 않은 변경된 버퍼들의 리스트를 관리한다. 이 리스트들은 다시 메인 리스트와 보..
오라클 래치와 락 (Latch & Lock) 래치와 락 - 오라클의 동기화 매커니즘 오라클은 거대한 동기화 머신이다. 오라클은 래치와 락이라는 두 개의 동기화 매커니즘을 이용해 리소스를 보호한다. 래치와 락의 존재 이유는 동시 작업으로부터 오라클의 자원을 보호하는 것이다. 래치 (Latch) - 래치란? 오라클 매뉴얼에서는 가벼운 락으로 분류하고 있다. 즉, 락 중에서도 아주 빠른 속도로 작동하게끔 구현된 경량화 된 락이라는 것이다. 그러나 보통은 래치와 락을 전혀 다른 객체로 분류하는 것이 일반적이다. 래치는 유닉스에서 제공하는 뮤텍스와 대단히 유사하다. 뮤텍스는 특정 리소스에 대한 배타적인 접근을 가능하게 하는 동기화 메커니즘이다. 래치는 뮤텍스와 같이 아주 빠르고 가볍게 특정 리소스에 대한 동기화를 구현하기 위해 고안된 객체이다. 특히 오라클..
OWI (Oracle Wait Interface) OWI 란? - 오라클은 어떤 작업을 수행하는 과정에서 원하는 리소스를 획득하지 못하는 경우에 리소스에 대한 점유가 해제될 때까지 리소스와 관련된 이벤트를 대기한다. 이처럼 프로세스가 겪는 대기 현상을 기록하고 관찰하는 일련의 기능과 인터페이스, 그리고 방법론을 통칭하여 OWI, 즉 Oracle Wait Interface라고 부른다. 대기 이벤트는 P1, P2, P3 라는 세 개의 파라미터를 통해 현재 대기하는 리소스를 표현한다. 대기 이벤트의 P1, P2, P3의 값은 V$SESSION_WAIT 뷰나 V$SESSION 뷰와 같은 다이나믹 뷰나 SQL Trace 파일 등을 통해 관찰 가능하다. 각 이벤트마다 P1, P2, P3의 의미는 각각 다르며, V$EVENT_NAME 뷰를 통해 확인 가능하다. 오라..