오라클 성능 고도화 1,2 권을 정리할 생각이다.
상세 아키텍처에 대해서는 책몇권으로는 감당할 수 없을 것이다.
하지만 SQL의 성능을 위해 튜닝을 목표로 하는 개발자라면 기본 아키텍처를 이해하는 것으로도 좋은 퍼포먼스를 보여줄 수 있다.
기본 아키텍처란 ?
위 2가지고 크게 나눌 수 있다.
쉽게말해 프로세스는 DB에 요청하고 DB는 데이터를 반환한다.
조금더 상세하게 나뉠때는
위 그림과 같이 DB와 Processes 사이에 메모리 공간이 있는데
이중 SGA(System Global Area)라는 공간이 핵심적이다.
메모리 영역과 프로세스를 합쳐 Instance라고 명한다.
SGA는 왜 존재하나요?
SGA는 빠른 데이터 입출력을 위해 존재한다.
Database의 물리적 저장공간에 직접 경유하며 데이터를 가져오는 행위는
큰 비용을 소모한다.
하지만 메모리 영역에 존재하는 데이터는 물리적 공간에 경유할 필요없이 바로 가져오며, 메모리 캐시는 전기적 신호에 불과하다.
(보조기억장치와 주기억장치의 개념이라보면 쉽다.)
SGA는 이름과같이 시스템에서 모두 적용되는 메모리 공간으로 모든 프로세스가 접근이 가능하다.
오라클은 SGA의 데이터 보안을 위해 LOCK 매커니즘(Latch)을 사용한다.
ServerProcesses는 언제 만들어 지나요?
위 그림은 오라클 접속시 내부동작 과정이다.
연결을 요청하는 순간 *PGA 를 생성하고 메모리를 할당한다. 이는 매우 비용이 많이드는 작업이므로 사용자가 연결을 요청할때마다 연결한다면 성능을 보장할 수 없다.
애플리케이션 구축시 커넥션 풀이 필요한 이유이다.
커넥션 풀은 사용자가 작업을 완료하더라도 커넥션을 유지하며 프로세스를 재사용한다.
재사용성은 반복작업이 많은 데이터베이스에서 성능 튜닝의 핵심이다.
커넥션 풀??
클라이언트가 첫 작업시, 커넥션 풀에서 커넥션을 생성하고, PGA영역에 있는 Server Process를 할당한다.
클라이언트는 커넥션 풀만 믿고 작업을 반복 수행한다.
커넥션 풀은 PGA와의 연결을 유지하며 Server Process가 제거되고 할당되는 것을 방지한다.