오라클 서버의 전체 구조
(1) 메모리와 디스크 | |
● INSTANCE (작업) 메모리 부분에 생성되는 구조 실제 작업하는 장소 오라클은 메모리를 나눠서 관리
- SGA(System Global Area) 실제 작업장소(공유메모리) 모든 조회나 대부분의 작업이 이루어짐 - Background Process 오라클 서버가 잘 운영되도록 해주는 역할
● DATABASE (저장) - 데이터가 저장되는 데이터 파일 - DB 전체의 관리정보가 들어있는 컨트롤 파일 - 장애 복구 시 사용되는 Redo 로그파일 |
|
(2) Instant 할당 및 관리 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
● Instance 생성과정 1. startup 요청을 받은 최초의 Oracle Server process가 초기화 파라미터(pfile 또는 spfile)에 적혀있는 설정을 참고해 OS kernel에게 공유메모리를 사용할 수 있도록 할당해 달라고 요청 2. 요청받은 kernel은 자신의 OS kernel 파라미터를 조회해 그 파일들에 설정되어 있는 내역으로 공유메모리(SGA)할당 3. 세마포어 설정 값 등을 기반으로 커널이 관리를 시작 (Server process가 종료되어도 SGA는 종료되지 않고, Instance가 종료되야 SGA가 공유메모리에서 사라짐) ● Kernel - 모든 하드웨어를 관장 (RAM을 사용해 작업하려면 kernel에게 허락받아야 함) - 커널이 메모리 관리를 잘 해야 성능이 좋아짐 ○ linux 커널값 적는 파일 /etc/sysctl.conf ○ solaris 커널값 적는 파일 /etc/system >> 예로, 오라클이 1G를 요청해도 /etc/sysctl.conf 파일에 500MB만 허락하도록 적혀있다면 그만큼만 할당해줌 >> 물리적으로 RAM을 추가해도(10G→30G) 설정파일의 값을 바꾸지 않는다면 프로그램이 사용하는 메모리는 변화 없음 ● 공유메모리 관리 - 모든 Server process들이 동시에 함께 RAM(공유메모리)을 사용하기 때문에, 하나의 메모리 블록을 여러 프로그램이 동시에 중복 사용하는 사태를 막기 위해 OS차원에서 제공하는 세마포어와 몇가지 Kernel 파라미터들이 존재함 - 세마포어(Semaphore) : 깃발(flag)이란 의미로 어떤 자원의 현재 사용 여부를 표현 set / unset, 셋트로 여러개씩 사용함 1. 사용할 메모리블록의 세마포어 상태를 먼저 확인함 2. 만약, 사용중(set)으로 설정돼있으면 Process는 대기하고 있다가 블록이 release되어 unset이 되는 순간에 세마포어를 set으로 설정함 -> 메모리블록 사용가능 - Kernel 파라미터 : 유닉스계열 OS별로권장 수치는 다를수 있음
● 커널이 위의 파라미터들을 기초로 해서 Oracle에 공유메모리를 할당하는 3가지 방법
( Fixed Area 부분은 반드시 전체가 1개의 세그먼트에 할당 되어야 함 ) |
(4) Dynamic SGA 기능(9i~) |
- 관리자가 필요에 의해 SGA의 구성요소의 크기를 변경한 후 오라클 인스턴스의 재시작 없이 즉시 적용할 수 있는 기능 (단, Redo Log Buffer를 포함한 몇가지는 제외) - 8i 버전까지는 SGA의 각 구성요소 크기를 변경하고 나서 오라클 인스턴스를 중단했다가 재시작해야만 변경사항이 적용되는 Static SGA 방식이었음. - 오라클에서 동적으로 메모리를 할당할 때 사용하는 단위: 그래뉼(Granule) - 10g 이후 버전기준 SGA_MAX_SIZE가 1GB 이하면 1Granule이 4MB, 1GB 초과면 1Granule이 16MB가 됨 ● 관련 파라미터 SGA_MAX_SIZE SHARED_POOL_SIZE DB_CACHE_SIZE
|
(5) Program Global Area(PGA) 주요 구성 요소 |
- 각 프로세스들이 개별적으로 사용하는 메모리 공간 - 모든 서버 프로세스들은 각각의 PGA를 가짐 - 주로 정렬관련 작업등이 이루어짐 ● Private SQL Area - Persistent Area와 Runtime Area로 나뉨 - 사용자가 SQL 문장을 수행하면 User Process가 Server Process에게 해당 쿼리를 전달해 주는데 이때 Server Process가 자신에게 작업을 요청한 User Process의 정보를 Session Memory부분에 저장을 한 후 해당 SQL을 Parse함 - 해당 SQL에 Bind 변수 등이 있을경우 해당 Bind변수값을 Persistent Area에 저장함 - 쿼리의 실행 상태정보와 쿼리를 수행하면서 임시로 정보를 저장해야 하는 경우 Runtime Area에 저장함 ● SQL Work Area - Sort 관련 작업(Sort Area)이나 Hash 관련 작업을 수행하는 공간 - 9i부터 PGA크기를 Oracle Server가 자동으로 관리할 수 있음 - 관련 파라미터 PGA_AGGREGATE_TARGET= PGA 총량 지정 WORKAREA_SIZE_POLICY=AUTO (동적관리), MANUAL (수동관리) * 1개의 개별 Server Process가 쓸 수 있는 PGA 메모리량 _SMM_MAX_SIZE
- 현재 서버의 PGA관련값 조회 SYS> SELECT * FROM v$pgastat; |
참고
- 오라클 관리 실무 (서진수. 생능출판사. 2013)
- 사진출처:https://docs.oracle.com/database/121/CNCPT/intro.htm#CNCPT-GUID-2B1BADE1-C36F-4555-9867-3B15B6CE858C