-
[Oracle] 오라클 아키텍처 1IT/etc 2022. 3. 26. 20:53
오라클 데이터베이스
아키텍처
Oracle Database에 대해 다시 Remind 하려고 한다. 먼저 기본 아키텍처부터 시작한다.
참고서적은 "오라클 성능 고도화 원리와 해법"이다.
오라클은 데이터베이스(데이터를 저장하는 파일 집합)와 이를 액세스하는 프로세스 사이에 SGA 라고 하는 메모리 캐시 영역을 두고 있다.오라클 아키텍처 디스크를 경유한 입출력은 물리적으로 액세스 암(Arm)이 움직이면서 헤드를 통해 데이터를 읽고 쓰는 반면 메모리 캐시를 통한 입출력은 전기적 신호에 불과하기 때문에 디스크 I/O에 비교할 수 없이 빠르다.우리가 흔히 사용하는 워드 프로세스도 이런 원리이다.사용자가 워드파일(.doc)을 클릭하면 디스크를 읽어 해당 내용을 메모리로 상주시켜서 워드프로세서 프로그램에 보여진다.여기서 워드프로세서와의 가장 큰 차이점은 많은 프로세서가 동시에 데이터를 액세스한다는 사실이다. 이 때문에 사용자 데이터를 보호하는 LOCK은 물론 공유 메모리 영역인 SGA(System Global Area or Shared Global Area)상에 위치한 데이터 구조에 대한 액세를 직렬화하기 위한 Lock 매커니즘(= Latch) 도 필요해진다.워드 프로세서는 파일 단위로 읽고 쓰지만, 오라클은 블록단위로 읽고, 저장할 때도 변경이 발생한 블록만 찾아 블록 단위로 저장한다. 수십 MB에 이르는 큰 워드파일을 열거나 저장할 때 오랜 시간이 소용되는 것을 경험하게 되는데, GB~TB급 데이터를 관리하는 DBMS가 그런 식으로 데이터를 읽고 쓴다는 것은 상상하기 어려운 일이다.최신 워드 프로세서는 캐시와 파일 간에 주기적으로 동기화를 수행해 주는 자동저장 기능이 있는 것처럼 오라클도 백그라운드에서 DBWR와 CKPT 프로세스가 캐시와 데이터파일 간 동기화를 주기적으로 수행해준다.DBMS마다 데이터베이스에 대한 정의가 조금씩 다른데, 오라클에서는 디스크에 저장된 데이터 집합(Datafile, Redo Log File, Control File등)을 데이터베이스라고 부른다.그리고 SGA 공유메모리 영역과 이를 액세스하는 프로세스 집합을 합쳐서 인스턴스(Instance)라고 부른다.프로세서 집합은 서버프로세서와 백그라운드프로세서 집합으로 나눌 수 있다. 서버 프로세서는 전면에서 사용자가 던지는 명령을 처리하고, 백그라운 프로세서는 보이지 않지만 뒤에서 묵묵히 주어진 역할을 수행한다.오라클에 접속하면 각 클라이언트를 위한 전용 서버 프로세서가 떠서 사용자가에게 필요한 서비스를 제공한다. SQL을 파싱하고 필요하면 최적화를 수행하며, 커서를 열어 SQL을 실행하면서 블록을 읽고, 읽은 데이터를 정렬해서 클라이언트가 요청한 결과집합을 만들어 네트워크를 통해 전송하는 일련의 작업들을 모두 서버프로세서가 처리해 준다.일하는 도중에 스스로 처리하지 못하는 일들(데이터파일로부터 DB 버퍼 캐시로 블록을 적재하거나 Dirty 블록을 캐시에서 밀어냄으로써 Free 블록을 확보하는 일, 그리고 Redo 로그 버펌를 비우는 일 등)을 만나면 OS, I/O 서브시스템, 백그라운드 프로세서 등에 신호를 보내 대신 일을 처리 하도록 요청한다.※ 오라클 아키텍처에 대해 다시 Remind 하기 위해 2009년에 발간된 "오라클 성능 고도화 원리와 해법1" 을 책장에서 꺼내어 블로그로 옮겨 보았다.
오라클 성능 고도화 원리와 해법1 'IT > etc' 카테고리의 다른 글
[Oracle] 오라클 DB 버퍼 캐시 (0) 2022.03.28 [Oracle] 오라클 아키텍처 2 (0) 2022.03.27 [Oracle] DBA_View의 테이블을 생성해보자. (0) 2022.03.24 [중고차 고질병 6탄] 기아 모하비 (0) 2022.03.23 네이버 증권 "종목" 크롤링 (0) 2022.03.22