1 / 9

Oracle 고도화 스터디

Oracle 고도화 스터디. 정한경. 2. DB 버퍼 캐시. ● 사용자가 입력한 데이타를 데이터 파일에 저장하고 이를 다시 읽는 과정에서 거쳐 가는 캐시 영역은 SGA 구성요소 중 하나인 DB 버퍼 캐시 (DB Buffer Cache) 다 . (1) 블록 단위 I / O Oracle 의 I / O 는 Block 단위다 . - 데이 터 파일에 저장된 데이터 블록을 DB 버퍼 캐시로 적재 할 때 - 메모리 버퍼 캐시에서 버퍼 블록을 액세스할 때

strom
Télécharger la présentation

Oracle 고도화 스터디

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Oracle 고도화 스터디 정한경

  2. 2. DB 버퍼 캐시 • ● 사용자가 입력한 데이타를 데이터 파일에 저장하고 이를 다시 읽는 과정에서 거쳐 가는 캐시 영역은 SGA구성요소 중 하나인 DB 버퍼 캐시(DB Buffer Cache)다. • (1) 블록 단위 I / O • Oracle의 I / O는 Block단위다. • - 데이터파일에 저장된 데이터 블록을 DB 버퍼 캐시로 적재 할때 • - 메모리 버퍼 캐시에서 버퍼 블록을 액세스할 때 • - 캐시에서 변경된 블록을 다시 데이터파일에 저장할 때 • 데이터파일에서 버퍼 캐시로 블록을 적재할 때 • - 인덱스를 경유한 테이블 액세스 시에는 한 번에 한 블록(Single Block)을 읽는다. • - Full Scan시에는 성능향상을 위해 한 번에 여러 개 블록(Multi Block)을 읽는다. • - DBWR가 버퍼 캐시로부터 변경된 블록(Dirty Block)을 주기적으로 데이터 파일에 기록할 때 • 블록 단위로 읽는다는 의미는? • - 하나의 레코드에서 하나의 컬럼만을 읽고자 하더라도 레코드가 속한 블록 전체를 읽게 됨

  3. 2. DB 버퍼 캐시 • (2) 버퍼 캐시 구조 • 바둑판을 생각하는것이 가장 이해가 빠르다. • 다른 DBMS에서는 Page단위를 쓴다. • SGA의 많은 자료구조(Data Structure)중 • 가장 많이 사용되는 것이 해시 테이블 / 해시 맵이고 DB 버퍼 캐시도 해시 태이블 구조로 관리 • 해싱(Hashing)알고리즘을 설명(주소록에 비유) • 고객의 주소와 전화번호를 관리하는 주소록에서 성씨가 같은 고객은 같은 페이지(해시 버킷)에 묶어서 관리 • 데이터 블록 주소(Data Block Address) • - DB 버퍼 캐시 내에서 데이터 블록을 해싱하기 위해 사용되는 키값 • - 해시 함수에 데이터 블록 주소를 입력해 리턴받은 해시 값(Hash Value)이 같은 블록들을 같은 해시 버킷(Bucket)에 연결 리스트(Linked List)구조로 연결하는것 • 각각의 연결 리스트를 해시 체인(Hash Chain)이라고 한다.

  4. 2. DB 버퍼 캐시 버퍼 헤더(Buffer Header)만 해시 체인에 연결되며 실제의 데이터 값이 필요해지면 버퍼헤더에 있는 포인터를 이용해 다시 버퍼 블록을 찾아가는 구조다.

  5. 2. DB 버퍼 캐시 • (3) 캐시 버퍼 체인 • 각 해시 체인은 래치(Latch)에 의해 보호된다. DB 버퍼같은 리소스에 대한 액세스를 반드시 직렬화(Serialization) 해야 하고 이를 위해 구현된 일종의 Lock 메커니즘을 • 래치(Latch)라고 부른다. • 래치를 획득 : 자료구조로의 진입이 허용 • 하나의 cache buffers chains 래치가 여러 개 해시 체인을 동시에 관리한다. • 버퍼 캐시 크기와 버전에 따라 달라진다. • 해시 버킷과래치 개수는 각각 _db_block_hash_bucket과 _db_block_hash_latches parameter를 통해 확인 • 오라클9i부터 읽기전용 작업 : cache buffers chains 래치를 Share모드로 획득 • - 주의할 것은 여기서 읽기전용 작업 해시 체인을 스캔하면서 필요한 블록을 찾는 작업을 말한다. • - select 문장을 동시에 수행하면 여전히 cache buffers chains 래치 경합이 발견된다. • 래치는데이터 자체를 보호하는 게 아니라 SGA에 공유돼 있는 자료구조를 보호하는 것

  6. 2. DB 버퍼 캐시 • cache buffers chains 래치는 버퍼 캐시에 연결된 체인구조를 보호한다. 해시 체인을 • 스캔하거나 거기에 블록을 추가 제거할때 래치가 요구된다. • cache buffers chains 래치의 중요한 용도 • - 버퍼 헤더에 Pin을 설정 • 9i부터 해시 체인을 스캔할 때는 Share 모드로 래치를 획득했다가 체인 구조를 • 변경(블록을 찾지 못해 디스크로부터 읽은 블록을 추가하거나버퍼 헤더에 Pin을 • 설정할 때만 Exclusive 모드로 올리도록 커널 코드가 변경된 것 같다.

  7. 2. DB 버퍼 캐시 (4) 캐시 버퍼 LRU 체인 버퍼 헤더는 해시 체인 뿐 아니라 LRU 체인에 의해서도 연결 DB 버퍼 캐시는 한번 읽은 데이터 블록을 캐싱해 두는 메모리 공간이다. 메모리는 유한한 자원이기에 버퍼 캐시가 사용빈도가 높은 데이터 블록들 위주로 구성될 수 있도록 LRU(Least recently used) 알고리즘을 사용해 관리된다. 모든 버퍼 블록 헤더를 LRU 체인에 연결해 시용빈도 순으로 위치를 옮겨가다가 Free 버퍼가 필요해질 때마다 액세스 빈도가 낮은 데이터 블록들을 밀어냄으로써 자주 액세스되는 블록들이 캐시에 더 오래 남아 있도록 관리하는 것이다. LRU 리스트에는 내부적으로 두 개의 리스트를 갖는다. - Dirty 리스트 : 캐시 내에서 변경됐지만 아직 디스크에 기록되지 않은 Dirty 버퍼 블록들을 관리(LRUW(LRU Write) 리스트) - LRU 리스트 : 아직 Dirty 리스트로 옮겨지지 않은 나머지 버퍼 블록들을 관리한다. 모든 버퍼 블록은 이 둘 중 하나에 반드시 속하지만 읽기 / 쓰기 작업을 위해 액세스되는 동안에는 리스트에서 잠시 풀려 나왔다가 다시 원래의 리스트로 연결되거나 최초변경이 발생하였을 때는 Dirty 리스트로 옮겨간다. (LRU 리스트를 보호하기 위해 사용하는 래치가 cache buffers lru chain 래치이다.

  8. 2. DB 버퍼 캐시 버퍼 상태 모든 캐시 버퍼는 아래 세 가지 중 하나의 상태가 된다. Free 버퍼 : 인스턴스 기동 후 아직 데이터가 읽히지 않아 비어 있는 상태(Clean 버퍼) 또는데이터가 담겼지만 데이터파일과 서로 동기화돼 있는 상태여서 언제든지 덮어 써도 무방한버퍼 블록이다. oracle이 데이터 파일로부터 새로운 데이터 블록을 로딩하려면 Free 버퍼를확보해야 한다. Free 상태인 버퍼에 변경이 발생하면 그 순간 Dirty 버퍼로 상태가 바뀐다. Dirty 버퍼 : 버퍼에 캐시 된 이후 변경이 발생했지만 아직 디스크에 기록되지 않아 데이터파일 블록과 동기화가 필요한 버퍼 블록을 말한다. 이 버퍼 블록들이 다른 데이터 블록을 위해재사용되려면 디스크에 먼저 기록되어야 하며 디스크에 기록되는 순간 Free 버퍼로 상태가바뀐다. Pinned 버퍼 : 읽기 또는 쓰기 작업을 위해 현재 액세스되고 있는 버퍼 블록을 말한다.

  9. Q & A

More Related