1.기본 아키텍쳐
오라클은 데이터베이스(데이터를 저장하는 파일집합)와 이를 액세스하는 프로세스 사이에 SGA라고 하는 메모리 캐시 영역을 두고 있습니다.
워드 프로세스와 비슷한 개념으로 작동하지만 차이점음 많은 프로세스가 동시에 데이터를 액세스한다는 사실입니다.
이 때문에 사용자 데이터를 보호하는 LOCK은 물론 공유 메모리 영역인 SGA(Shared Global Area)상에 위치한 데이터 구조에 대한 액세스를 직렬화 하기 위한 LOCK 매커니즘도 필요해집니다.
오라클에서는 아래와 같이 데이터베이스와 인스턴스를 구분하고 있습니다.
데이터베이스= 디스크에 저장된 데이터 집합
인스턴스=SGA공유메모리영역과 이를 액세스하는 프로세스집합
서버프로세스가 하는일은 Parse-Execute-Petch의 역할을 하며 사용자에게 필요한 서비스를 제공합니다.
1.SQL을 파싱(Parse)하고 필요하면 최적화를 수행합니다.
2.SQL을 실행(Execute)해서 블록을 읽고, 읽은 데이터를 정렬합니다.
3.결과집합을 만들어 네트워크를 통해 전송(Petch)합니다.
일하는 도중에 스스로 처리하지 못하는 일들을 만나면 OS,I/O서브시스템,백그라운드 프로세스 등에 신호를 보내 대신 일을 처리하도록 요청합니다.
SQL*PLUS에서 오라클에 접속할때 내부적으로 어떤 과정을 거쳐서 세션이 수립되는지 알아봅시다.
1.사용자가 sqlplus scott/tiger를 검색하여 LISTENER에 연결요청을 합니다.
2.LISTENER는 서버측에 프로세스 생성을 요청하고 연결요청을 상속합니다.
3.서버는 PGA메모리를 생성합니다.
4.사용자에게 RESEND패킷을 다시 전송합니다.
5.사용자는 연결하여 접속하게 됩니다.
주목할점은, 리스너에 연결요청을 하는 순간 하나의 프로세스를 띄우고 PGA메모리를 할당한다는 사실입니다. 이는 비용이 매우 큰 작업이므로 하나의 SQL문을 수행하기 위해 매번 연결요청을 한다면 성능이 좋을리가 없습니다. 그래서 커넥션 풀(Connection Pool)기능이 필요합니다. 한번 커넥션을 맺으면 작업을 완료하더라도 이를 해제하지 않고 애플리케이션 서버에 Pooling하고 있다가 반복 재사용합니다. (데이터베이스 성능튜닝의 핵심원리는 이와 같은 재사용성입니다!)
RAC(Real Application Cluster)환경에서는 데이터베이스 하나에 여러개의 인스턴스로 구성됩니다. RAC모델은 데이터파일만 공유하는 과거의 Shared Disk 방식에서 한층 더질일보한 공유 캐시(Shared Cache)방식을 사용합니다. 글로벌 캐시개념을 사용하게되고 데이터블록을 이웃 노드간의 전용 내부 네트워크를 사용하여 전송받아 서비스 할 수 있습니다. 심지어 다른 인스턴스에서 갱신하고 아직 커밋하지 않은 Active상태의 블록까지도 디스크를 경유하지 않고 메모리와 디스크간에 동기화되지 않은 버퍼인 Dirty Buffer상태에서 네트워크를 통해 서로 주고받으며 갱신을 수행합니다!
1장의 1절의 내용은 여기까지 정리하고 다음글에서 다음 절의 내용을 정리하겠습니다.
'스터디 > 오라클 성능고도화 원리와 해법1' 카테고리의 다른 글
CH1.오라클 아키텍처 - 8.블록 클린아웃, 9.Snapshot too old (0) | 2019.12.21 |
---|---|
CH1.오라클 아키텍처 - 6.문장수준 읽기 일관성 7.Consistent vs. Current 모드 읽기 (0) | 2019.12.20 |
CH1.오라클 아키텍처 - 4.Redo , 5. Undo (0) | 2019.12.19 |
CH1.오라클 아키텍처 - 3.버퍼 LOCK (0) | 2019.12.18 |
CH1.오라클 아키텍처-2.DB 버퍼 캐시 (0) | 2019.12.17 |
댓글