IT
-
[Oracle] 오라클 RedoIT/etc 2022. 4. 2. 20:56
오라클 Redo Log 오라클은 데이터파일과 컨트롤 파일에 가해지는 모든 변경사항을 하나의 Redo 로그 엔트리로서 Redo 로그에 기록한다. Redo 로그는 Online Redo와 Archived Redo 로그로 구성된다. Online Redo 로그는 Redo 로그 버퍼에 버퍼링된 로그 엔트리를 기록하는 파일로서, 최소 두 개 이상의 파일로 구성된다. 현재 사용 중인 Redo 로그 파일이 꽉 차면 다음 Redo 로그 파일로 로그 스위칭이 발생하며, 계속 Redo로그를 써 나가다가 모든 Redo 로그 파일이 꽉 차면 다시 첫 번째 Redo 로그 파일부터 재사용하는 라운드 로빈 방식을 사용한다. Archived Redo 로그는 Online Redo 로그가 재사용되기 전에 다른 위치로 백업해 둔 파일을 말한..
-
[Oracle] 오라클 버퍼 LockIT/etc 2022. 4. 1. 20:21
버퍼 Lock 버퍼 Lock 이란? DB 버퍼 캐시 내에서 버퍼 블록을 찾았으면 가급적 빨리 쥐고 있던 래치를 해제해야 한다. 그러지 않으면 하나의 cache buffers chains 래치에 여러 개의 해시 체인이 달렸으므로 래치에 대한 경합 발생 가능성이 증가하게 된다. 그런데 그 버퍼에 먼저 접근한 선행 프로세스가 아직 버퍼를 사용 중이라면 어떻게 해야 할까? 데이터 접합성에 대한 고민이 또 생긴다. 아주 짧은 순간일지라도 두 개 이상의 프로세스가 동시에 버퍼 내용을 읽고 쓴다면 문제가 생길 수 있는 것이다. 이를 막기 위해 캐시된 버퍼 블록을 읽거나 변경하려는 프로세스는 먼저 버퍼 헤더로부터 버퍼 Lock을 획득해야 한다. 버퍼 Lock을 획득했다면 래치를 곧바로 해제한다. 또 다른 언전장치를 마..
-
[Oracle] 오라클 DB 버퍼 캐시_(버퍼 상태)IT/etc 2022. 3. 31. 20:04
오라클 DB 버퍼 캐시_(버퍼 상태) 모든 캐시 버퍼는 아래 세가지 중 하나의 상태에 놓이게 된다. Free 버퍼 : 인스턴스 기동 후 아직 데이터가 읽히지 않아 비어 있는 상태(Clean buffer)이거나, 데이터가 담겼지만 데이터파일과 서로 동기화돼 있는 상태여서 언제든지 덮어 써도 무방한 버퍼 블록을 말한다. 오라클이 데이터 파일로부터 새로운 데이터 블록을 로딩하려면 먼저 Free 버퍼를 확보해야 한다. Free 상태인 버퍼에 변경이 발생하면 그 순간 Dirty 버퍼로 상태가 바뀐다. Dirty 버퍼 : 버퍼에 캐시된 이후 변경이 발생했지만, 아직 디스크에 기록되지 않아 데이터 파일 블록과 동기화가 필요한 버퍼 블록을 말한다. 이 버퍼 블록들이 다른 데이터 블록을 위해 재사용되려면 디스크에 먼저 ..
-
[Oracle] 오라클 DB 버퍼 캐시_(캐시 버퍼 LRU 체인)IT/etc 2022. 3. 30. 20:01
캐시 버퍼 LRU 체인 버퍼 헤더는 해시 체인 뿐 아니라 LRU 체인에 의해서도 연결돼 있다. DB 버퍼 캐시는 한번 읽은 데이터 블록을 캐싱해 두는 메모리 공간이지만 메모리는 유한한 자원이어서 모든 데이터를 캐싱할 수는 없는 일이다. 따라서 버퍼 캐시가 사용빈도가 높은 데이터 블록들 위주로 구성 될 수 있도록 LRU(Least recently used) 알고리즘을 사용해 관리된다. 모든 버퍼 블록 헤더를 LRU 체인에 연결해 사용빈도 순으로 위치를 옮겨가다가, Free 버퍼가 필요해질 때마나 액세스가 빈도가 낮은 데이터 블록들을 우선하여 밀어냄으로써 자주 액세스되는 블록들이 캐시에 더 오래 남아 있도록 관리한다. LRU 리스트에는 내부적으로 두 개의 리스트를 갖는다. *Dirty 리스트 : 캐시 내에서..
-
[Oracle] 오라클 DB 버퍼 캐시_(캐시 버퍼 체인)IT/etc 2022. 3. 29. 20:00
오라클 DB 버퍼 캐시_(캐시 버퍼 체인) 캐시 버퍼 체인 해시 체인은 래치에 의해 보호된다. DB 버퍼 캐시는 공유 메모리 영역인 SGA 내에 존재하므로 여러 프로세스에 의한 동시 액세스가 일어날 가능성이 크다. 따라서 같은 리소스에 대한 액세스를 반드시 직렬화해야하고, 이를 위해 구현된 일종의 Lock 메커니즘을 래치 라고 부른다. 래치를 획득한 프로세스만이 그 래치에 의해 보호되는 자료구조로의 진입이 허용된다. 두 개 이상의 프로세스가 같은 해시 체인으로 진입해 새로운 버퍼 블록을 연결하고 해제 하는 작업을 동시에 진행한다면 문제가 발생할 수 있고, 이를 방지하기 우이해 사용하는 것이 cache buffers chains 래치다. 하나의 cache buffers chains 래치가 여러 개 해시 체..
-
[Oracle] 오라클 DB 버퍼 캐시IT/etc 2022. 3. 28. 19:37
DB 버퍼 캐시 빠른 데이터를 입출력을 위해 SGA 공유 메모리를 이용한다고 설명했는데, 좀 더 구체적으로 말해 사용자가 입력한 데이터를 데이터파일에 저장하고 이를 다시 읽는 과정에서 거쳐 가는 캐시 영역은 SGA 구성요소 중 하나인 DB 버퍼 캐시(DB Buffer Cache) 이다. 블록단위 I/O 오라클에서는 I/O는 블록(block) 단위로 이루어지는데, 메모리 버퍼 캐시에서 버퍼 블록을 액세스 할 때뿐만 아니라 데이터파일에 저장된 데이터 블록을 DB 버퍼 캐시로 적재하거나 캐시에서 변경된 블록을 다시 데이터파일에 저장 할 때도 블록 단위로 처리한다. 데이터파일에서 버퍼 캐시로 블록을 적재할 때, 인덱스를 경유한 테이블 액세스 시에는 한 번에 한 블록씩(single block read) 읽어들이지..
-
[Oracle] 오라클 아키텍처 2IT/etc 2022. 3. 27. 20:00
오라클 데이터베이스 아키텍처 리스너(Listener)에 연결요청을 하는 순간 하나의 프로세스를 뛰우고(fork) PGA 메모리를 할당한다는 사실이다. 이는 비용이 매우 큰 작업이므로 하나 또는 일련의 SQL문을 수행하기 위해 매번 연결요청을 한다면 결코 성능이 좋을 리 없다. 오라클에 접속하는 애플리케이션을 구축할 때 반드시 커넥션 풀(Connection Pool)기능이 필요한 이유가 여기에 있다. 한번 커넥션을 맺으면 작업을 완료하더라도 이를 해제하지 않고 애플리케이션 서버에 Pooling 하고 있다가 반복 재사용한다. 뒤에서 라이브러리 캐시 최적화 원리, DB 버퍼캐시 최적화 원리를 공부하면서 느끼겠지만 그 모든 것이 재사용성과 관련 있다. 소프트웨어 세계에서 가장 중요한 화두인 재사용성은 데이터베이..
-
[Oracle] 오라클 아키텍처 1IT/etc 2022. 3. 26. 20:53
오라클 데이터베이스 아키텍처 Oracle Database에 대해 다시 Remind 하려고 한다. 먼저 기본 아키텍처부터 시작한다. 참고서적은 "오라클 성능 고도화 원리와 해법"이다. 오라클은 데이터베이스(데이터를 저장하는 파일 집합)와 이를 액세스하는 프로세스 사이에 SGA 라고 하는 메모리 캐시 영역을 두고 있다. 디스크를 경유한 입출력은 물리적으로 액세스 암(Arm)이 움직이면서 헤드를 통해 데이터를 읽고 쓰는 반면 메모리 캐시를 통한 입출력은 전기적 신호에 불과하기 때문에 디스크 I/O에 비교할 수 없이 빠르다. 우리가 흔히 사용하는 워드 프로세스도 이런 원리이다. 사용자가 워드파일(.doc)을 클릭하면 디스크를 읽어 해당 내용을 메모리로 상주시켜서 워드프로세서 프로그램에 보여진다. 여기서 워드프로..