오라클은 정보를 메모리와 디스크등에 저장 합니다. 가능하면 메모리에 원하는 정보가 있는 것이 훨씬 빠르고 효율적 입니다. 오라클의 메모리 구조는 크게 아래와 같이 3가지 구조로 볼 수 있습니다.
SGA(System Global Area) – 오라클 프로세스들이 접근하는 하나의 큰 공유 메모리 세그먼트(Share Pool, DataBase Buffer Cache, Redo Log Buffer, Java Pool, Large Pool)
PGA(Process Global Area) – 한 프로세스 혹은 스레드의 개별적인 메모리 공간으로 다른 프로세스와 스레드는 접근 불가
UGA(User Global Area) – 사용자 세션과 관련된 메모리 공간, MTS 혹은 전용서버모드로 동작 하느냐에 따라 SGA 또는 PGA에 존재 합니다.
----------------------------------------------------
SGA(System Global Area)
SGA는 오라클이 시스템의 일정 자원을 정적으로 할당 받아 관리하는 오라클 시스템 영역으로 데이터베이스 인스턴스가 활성화 되면(Oracle이 Startup 될때) 시스템의 일정 부분을 할당 받고 인스턴스 종료 시(Shutdown 시) 반환하는 구조를 가집니다.
사용자가 테이블의 데이터를 엑세스 할 때 이러한 데이터는 메모리에 위치하며 즉 SGA안에 위치하게 되면 다른 사용자가 같은 데이터를 요구할 때는 오라클이 디스크에서 해당 내용을 읽어 오는 것이 아니라 이 메모리 영역에서 데이터를 가져다가 보여주게 됩니다.
이럴 경우 디스크에서 읽어 오는 것 보다 훨씬 빠르고 효율적 입니다. 이렇게 빠른 엑세스를 위해 SGA는 서버의 Main Memory에 위치하게 되며 만약 SGA 영역이 스와핑 된다면 SGA내의 데이터를 빠르게 접근 할 수 없게 됩니다.
모든 사용자는 데이터베이스 인스턴스에 접근하여 인스턴스의 SGA내의 정보를 읽을 수 있으며 오라클의 여러 프로세스는 SGA 영역을 읽고 쓸 수 있습니다. SGA의 데이터 구조와 그에 대한 간단한 설명 입니다.
데이터베이스 버퍼 캐시(Database Buffer Cache) – 실행 한 SQL문장의 대상이 되는 데이터 즉 디스크로부터 읽혀진 데이터의 복사본이 저장되는 메모리 영역, SQL이 실행되기 전의 Before 이미지와 변경된 후의 After Image가 저장 됩니다.
리두 로그 버퍼(Redo Log Buffer) – DataBase의 데이터 블록에 행하여 진 모든 변경 사항에 관한 정보를 기록하며 장애 발생시 복구에 이용됩니다.
공유 풀(Shared Pool) – DB에 접근하는 사용자들이 공유, 처리되는 SQL문장들이 저장되는 Library Cache와 SQL 문장의 실행을 위해 필요한 딕셔너리 정보를 간직하고 있는 Data
Dictionary Cache로 구성 됩니다. Library Cache는 가장 최근에 실행된 SQL 문과 그것에 관한 정보를 보관 합니다. Data Dictionary Cache는 가장 최근에 사용된 데이터베이스 정의(able, View이름, Table의 Column명, 사용자 정보)가 저장되어 있으며 이들 정의는 Data Dictionary로부터 읽혀 집니다.
자바 풀(Java Pool) – Java 프로그램을 사용하여 데이터베이스에 접근하여 일련의 작업을 하는 경우 사용되는 영영으로 데이터베이스 내에서 실행되는 Java Code를 저장 합니다.
대용량 풀(Large Pool, Optional) – 백업이나 복구 같은 작업시에 처리되는 대용량 데이터를 저장하는데 사용되는 대용량 메모리 영역으로 SQL문의 처리와는 직접적인 관련이 없습니다.
SGA 영역에는 데이터베이스의 상태와 인스턴스에 대한 일반적인 정보가 들어 있습니다. 이것은 백그라운드 프로세스가 필요한 정보로 Fixed SGA라고 하며, 사용자 정보는 이 영역에 저장되지 않습니다. SGA는 프로세스끼리의 정보(예를들면 Locking)를 주고 받는 중간 역할을 합니다. 만약 시스템이 공유 서버 (Shared Server) Architecture라면 사용자의 요구와 반응에 대한 큐와 PGA에 대한 약간의 정보를 SGA에 포함하고 있습니다.
참고로 SGA의 상태를 보기 위해서는 SQL*Plus등으로 로그인 한 후… 아래 처럼 하면 된다.
SQL> show sga
Total System Global Area 72123504 bytes
Fixed Size 279664 bytes
Variable Size 67108864 bytes
Database Buffers 4194304 bytes
Redo Buffers 540672 bytes
오라클 9i에서는, SGA가 이전 버전에서 처럼 정적으로 구성될 수도 있고, 동적으로 바뀔 수 있게 구성될 수 도 있습니다.
SGA(System Global Area) – 오라클 프로세스들이 접근하는 하나의 큰 공유 메모리 세그먼트(Share Pool, DataBase Buffer Cache, Redo Log Buffer, Java Pool, Large Pool)
PGA(Process Global Area) – 한 프로세스 혹은 스레드의 개별적인 메모리 공간으로 다른 프로세스와 스레드는 접근 불가
UGA(User Global Area) – 사용자 세션과 관련된 메모리 공간, MTS 혹은 전용서버모드로 동작 하느냐에 따라 SGA 또는 PGA에 존재 합니다.
----------------------------------------------------
SGA(System Global Area)
SGA는 오라클이 시스템의 일정 자원을 정적으로 할당 받아 관리하는 오라클 시스템 영역으로 데이터베이스 인스턴스가 활성화 되면(Oracle이 Startup 될때) 시스템의 일정 부분을 할당 받고 인스턴스 종료 시(Shutdown 시) 반환하는 구조를 가집니다.
사용자가 테이블의 데이터를 엑세스 할 때 이러한 데이터는 메모리에 위치하며 즉 SGA안에 위치하게 되면 다른 사용자가 같은 데이터를 요구할 때는 오라클이 디스크에서 해당 내용을 읽어 오는 것이 아니라 이 메모리 영역에서 데이터를 가져다가 보여주게 됩니다.
이럴 경우 디스크에서 읽어 오는 것 보다 훨씬 빠르고 효율적 입니다. 이렇게 빠른 엑세스를 위해 SGA는 서버의 Main Memory에 위치하게 되며 만약 SGA 영역이 스와핑 된다면 SGA내의 데이터를 빠르게 접근 할 수 없게 됩니다.
모든 사용자는 데이터베이스 인스턴스에 접근하여 인스턴스의 SGA내의 정보를 읽을 수 있으며 오라클의 여러 프로세스는 SGA 영역을 읽고 쓸 수 있습니다. SGA의 데이터 구조와 그에 대한 간단한 설명 입니다.
데이터베이스 버퍼 캐시(Database Buffer Cache) – 실행 한 SQL문장의 대상이 되는 데이터 즉 디스크로부터 읽혀진 데이터의 복사본이 저장되는 메모리 영역, SQL이 실행되기 전의 Before 이미지와 변경된 후의 After Image가 저장 됩니다.
리두 로그 버퍼(Redo Log Buffer) – DataBase의 데이터 블록에 행하여 진 모든 변경 사항에 관한 정보를 기록하며 장애 발생시 복구에 이용됩니다.
공유 풀(Shared Pool) – DB에 접근하는 사용자들이 공유, 처리되는 SQL문장들이 저장되는 Library Cache와 SQL 문장의 실행을 위해 필요한 딕셔너리 정보를 간직하고 있는 Data
Dictionary Cache로 구성 됩니다. Library Cache는 가장 최근에 실행된 SQL 문과 그것에 관한 정보를 보관 합니다. Data Dictionary Cache는 가장 최근에 사용된 데이터베이스 정의(able, View이름, Table의 Column명, 사용자 정보)가 저장되어 있으며 이들 정의는 Data Dictionary로부터 읽혀 집니다.
자바 풀(Java Pool) – Java 프로그램을 사용하여 데이터베이스에 접근하여 일련의 작업을 하는 경우 사용되는 영영으로 데이터베이스 내에서 실행되는 Java Code를 저장 합니다.
대용량 풀(Large Pool, Optional) – 백업이나 복구 같은 작업시에 처리되는 대용량 데이터를 저장하는데 사용되는 대용량 메모리 영역으로 SQL문의 처리와는 직접적인 관련이 없습니다.
SGA 영역에는 데이터베이스의 상태와 인스턴스에 대한 일반적인 정보가 들어 있습니다. 이것은 백그라운드 프로세스가 필요한 정보로 Fixed SGA라고 하며, 사용자 정보는 이 영역에 저장되지 않습니다. SGA는 프로세스끼리의 정보(예를들면 Locking)를 주고 받는 중간 역할을 합니다. 만약 시스템이 공유 서버 (Shared Server) Architecture라면 사용자의 요구와 반응에 대한 큐와 PGA에 대한 약간의 정보를 SGA에 포함하고 있습니다.
참고로 SGA의 상태를 보기 위해서는 SQL*Plus등으로 로그인 한 후… 아래 처럼 하면 된다.
SQL> show sga
Total System Global Area 72123504 bytes
Fixed Size 279664 bytes
Variable Size 67108864 bytes
Database Buffers 4194304 bytes
Redo Buffers 540672 bytes
오라클 9i에서는, SGA가 이전 버전에서 처럼 정적으로 구성될 수도 있고, 동적으로 바뀔 수 있게 구성될 수 도 있습니다.
'DB' 카테고리의 다른 글
[QUERY] 실행중인(ACTIVE) SQL문 확인 (0) | 2006.07.16 |
---|---|
[QUERY] Role (0) | 2006.07.16 |
[SGA튜닝] SQL문장의 메모리 사용량 확인 (0) | 2006.07.16 |
[SQL튜닝]EXISTS 와 DISTINCT (0) | 2006.07.16 |
WHERE versus HAVING (0) | 2006.07.16 |