2011. 1. 20. 17:37
Oracle Memory Work/ORACLE2011. 1. 20. 17:37
Oracle Server = Instance + Database
. Instance = Memory(SGA) + Backgroud Processes
. 오라클 데이터 베이스를 접속하는 문이다.
. 항상 하나의 데이터 베이스만을 open한다. (database는 여러개의 인스턴스가 가능 = RAC)
. instance에 의해 database는 mount(메모리를 할당 받은 상태)된다.
. SGA
= Shared Pool + DB buffer Cache + Redo Log Buffer
. Backgroud Processes
= PMON + SMON + SNPn + LCKn + REDO + Dnnn + Pnnn + CKPT + ARCH + LGWR + DBWR
. Database
. data files : meta data(data dictionary), user data
. control files : 오라클의 구조 정보 (동기화 정보, 물리적 그조)를 control하는 파일
. redo log files : 데이터가 변경된 레코드 저장
흐름
User Process -> Server Process -> PGA -> SGA -> Database -> User Process
. User Process : client에서 실행되며, sqlplus, developer/2000등의 application을 실행했을 때 생성
. Server Process
. user process의 요구를 받아 결과 값을 client에게 return한다.
. 각각의 user process마다 server process가 하나씩 생긴다.(1:1관계)
. 하나의 server process는 하나의 PGA를 생성한다.
User Process
. 사용자가 오라클 Application Program을 실행 시켰을 때 사용되는 프로세스이다. (sql*plus, Forms, Pro*C 등이 해당)
. 사용자가 오라클 서버에 접속할 때마다 사용자 프로세스가 생성된다.
. 사용자가 실행시킨 SQL문을 서버 프로세스에 전달하고, 그 결과를 서버 프로세스로부터 받아 수행한다.
Server Process
. Server Prorcess 정의
. Server에서 실행된다.
. 오라클은 서버프로세스를 생성하여 접속된 사용자 프로세스의 요구사항(SQL문)을 처리한다.
. 전용 서버 구성에서는 단일 사용자 프로세스에 대한 요구사항을 처리하며, 공유 서버 구성일 때는 여러 사용자 프로세스가 적은 수의 서버 프로세스를 공유하여 서버 프로세스 수를 최소화하는 동시에 사용 가능한 시스템 자우너 활용도를 최대화 한다.
. Server Process의 역할
전달받은 SQL문을 Parse, 실행(Execute), 패치(Fetch) 작업을 통행 실행시킨다.
. Parse
SQL문 문법 검사
사용자 인증 및 권한 검사
객체의 사용 가능 여부 검사
. Execute
parse과정에서 만들어진 parse tree로 원하는 데이터를 찾음
데이터를 찾은 후 실제 데이터 read 수행
필요할 경우 데이터 수정
. Fetch
데이터를 사용자 프로세스에게 전달
PGA
. PGA 정의
. 데이터베이스에 접속하는 유저에게 할당되는 각각의 서버 프로세스가 독자적으로 사용하는 오라클 메모리 영역.
. PGA는 프로세스가 생성될 때 할당되면 프로세스가 종료될 때 해제.
. 각각의 server process마다 하나의 PGA를 생성.
. PGA의 구조
정렬공간 (Sort Area)
+ 세션정보 (Session Information)
+ 커서 상태 정보 (Cursor State)
+ 변수 저장 공간 (Stack Space)
. 정렬공간 : order by 또는 group by등의 정렬을 수행하기 위한 공간
. 세션정보 : 서버 프로세스에 의해 추출된 결과 값을 전달하기 위해 필요한 유저 프로세스의 세션정보 저장
. 커서상태정보 : 해당 SQL의 파싱 정보가 저장되어 있는 주소 저장
. 변수저장공간 : SQL문장에 바인드변수를 사용할 경우 해당 바인드 변수를 저장하는 공간
. UGA = 정렬공간 + 세션정보 + 커서상태정보
. PGA share and dedicated
전용 Server : PGA(Stack Area + Session Information) + SGA()
공유 Server : PGA(Stack Area) + SGA (Session Information)
. dedicated : PGA에 Stack과 UGA가 위치한다.
. share : PGA에 Stack만 올라가고, UGA는 SGA에 위치하는데, UGA가 SGA에 상주하면 share pool의 공간이 좁아지므로 실질적으로 UGA는 large pool에서 돌아간다.
. PGA 관리
세개의 파라메터로 PGA의 크기를 관리할 수 있다.
. WORKAREA_SIZE_POLICY
MANUAL로 설정할 경우 : SORT_AREA_SIZE 파라메터를 이용하여 정렬공간을 설정한다.
AUTO로 설정할 경우 : PGA_AGGREGATE_TARGET 파라메터를 이용하여 PGA의 크기를 설정한다.
. SORT_AREA_SIZE : PGA에서의 sort는 기본적으로 memory sort인데, PGA의 sort공간이 부족하여 디스크의 temporary공간에서 sort하는 것을 disk sort라 하는데 이는, I/O발생이 빈번하여 속도가 저하되므로, MENUAL로 설정하여 직접 sort size의 크기를 늘려 I/O발생이 빈번하지 않도록 설정한다.
. PGA_AGGREGATE_TARGET : 모든 세션의 PGA 크기의 합을 설정하는 파라메터이다. (user 한명의 PGA가 아닌 모든 user의 PGA크기를 관리!!)
. PGA의 크기 확인
SELECT addr, username, pga_used_mem, pga_alloc_mem, pga_max_mem FROM v$process
. PGA_USERD_MEM:프로세스가 현재 사용하는 PGA의 크기
. PGA_ALLOC_MEM: 프로세스에 할당된 PGA의 크기 (사용 완료 후 시스템 메모리에 반환하지 않는 메모리 포함)
. PGA_MAX_MEM:프로세스가 사용한 최대 PGA의 크기