Memory Architecture of a Database Instance
Instance가 시작되면 Oracle Database는 Memory 영역을 할당하고 Background Process를 시작합니다.

Memory 영역에는 아래와 같은 정보가 저장됩니다:
· 프로그램 코드
· 연결된 각 세션에 대한 정보(현재 active가 아니어도)
· 프로그램 execution 중에 필요한 정보
· 프로세스 간에 공유 및 전달되는 lock data와 같은 정보
· Disk에도 존재하는 Data blocks 및 Redo Record와 같은 Cached Data
이러한 Memory Structure는 아래와 같은 여러 Memory영역으로 구분됩니다.
SGA(System Global Area)
SGA는 하나의 Database Instance에 대한 Data 및 Control 정보를 포함하는 SGA component로 알려진 Shared Memory Structure입니다. Oracle Database는 Instance startup 시 SGA에 대한 Memory를 자동으로 할당하고 Instance shutdown 시 Memory를 회수합니다. 모든 Server Process 및 Background Process는 SGA를 공유하여 SGA에 정보를 Read/Write 할 수 있습니다. 이러한 SGA components에 대한 정보는 V$SGASTAT view에서 쿼리할 수 있습니다.
SGA components는 아래와 같습니다:
· Database Buffer Cache
· In-Memory Area
· Redo Log Buffer
· Shared Pool
· Large Pool
· Java Pool
· Fixed SGA
· Optional Performance-Related SGA Subareas
각 항목에 대해 아는 것은 굉장히 중요하니 다음 포스트에서 자세하게 다루도록 하겠습니다.
PGA(Program Global Area)
PGA는 Oracle Process에서만 사용할 수 있는 Data 및 Control 정보를 포함하는 Nonshared Memory Area입니다. Oracle Database는 Oracle Process가 시작될 때 PGA를 생성합니다.
각 Server Process 및 Background Process에 대해 하나의 PGA가 존재합니다. PGA는 각각 다른 목적을 가진 다른 영역으로 세분화됩니다. 개별 PGA의 모음은 Total Instance PGA 또는 Instance PGA라고 합니다. Database Init Parameter는 개별 PGA가 아닌 Instance PGA size를 설정합니다.
· PGA_AGGREGATE_TARGET?
사용가능한 PGA Memory에 대한 설정
· PGA_AGGREGATE_LIMIT?
Instance가 사용하는 총 PGA Memory에 대한 limit 설정


SQL Work Areas
Memory-intensive 작업에 사용되는 PGA의 Private Allocation입니다.
Private SQL Area
Private SQL Area은 Parsed SQL문에 대한 정보와 Processing을 위한 기타 session별 정보를 가지고있습니다.
Server Process가 SQL 또는 PL/SQL code를 실행할 때, Process는 Private SQL Area를 사용하여 Bind variable values, Query Execution State 정보, Query Execution Work Area를 저장합니다.
SGA에 실행계획을 저장하는 Shared SQL Area와 혼동하지 쉽지만 명확하게 구분하시기 바랍니다.
UGA(User Global Area)
UGA는 session memory로, 로그온 정보와 같은 session variables 및 database session에서 요구하는 기타 정보를 위해 할당된 memory입니다.
Software code area
실행 중이거나 실행할 수 있는 code를 저장하는 데 사용되는 Memory 영역입니다. Oracle Database Code는 일반적으로 user program과 다른 위치(more exclusive/protected location)에 있는 software area에 저장됩니다.