오라클 인스턴스, SGA, PGA, 백그라운드 프로세스,공유풀,데이터베이스버퍼캐시,리두로그,오라클교육동영상

Поделиться
HTML-код
  • Опубликовано: 9 фев 2025
  • 오라클 인스턴스, SGA 메모리 영역에 관해 설명한 동영상 입니다. 오라클 SGA의 내부 구성요소에 대해 동영상을 통해 이해해 보시고 오라클의 구조에 대해 이해하시면 좋겠습니다.
    [ORACLE 19C, 오라클 인스턴스]
    오라클 인스턴스(Oracle Instance)는 백그라운드 프로세스와 메모리 구조(SGA + PGA)의 조합으로 사용자가 데이터에 접근하려면 인스턴스가 시작되어 있어야 합니다.
    오라클 인스턴스가 시작될 때 SGA가 할당이 되고 필수 백그라운드 프로세스가 시작되며 백그라운드 프로세스는 데이터베이스 인스턴스의 일부로 운영에 필요한 유지 관리 작업을 처리합니다. 또한 백그라운드 프로세스는 데이터베이스에 저장된 Datafile에 대해 작업을 하고 메모리 구조(SGA + PGA)를 사용하여 DB 운영을 위한 작업을 수행합니다.
    DB에 대한 연결을 처리하오라클 인스턴스 기동시는 서버 프로세스를 생성하는데, 클라이언트 프로그램의 사용자 프로세스의 요청에 대한 대한 SQL작업을 수행합니다. 예를 들면 SQL 문 구문 분석 및 실행 후 및 클라이언트 프로그램에 결과를 반환합니다.
    [ORACLE 19C, SGA]
    오라클 SGA(System Global Area)는 Oracle Database에 대한 데이터 및 제어 정보를 포함하는 공유 메모리 덩어리로 모든 서버프로세스 및 백그라운드 프로세스는 SGA를 공유합니다.
    오라클 인스턴스를 시작할 때 SGA에 할당된 메모리가 표시됩니다.
    공유 풀(Shared Pool) : 오라클 사용자 간 공유하는 공간으로 SQL문을 처리하고 커서를 공유하는데 사용되는 메모리 공간 입니다. 예를 들어 파싱된 SQL, SQL실행계획, 컴파일된 PL/SQL 프로그램, 시스템 매개변수 및 데이터 사전(Data Dictionary) 정보등이 저장됩니다.
    데이터베이스에서 발생하는 거의 모든 작업이 해당 되는데, 예를들어 사용자가 SQL 문을 실행하면 PGA에서 이전에 실행된 동일한 SQL문장이 있는지 Shared Pool에 접근하여 확인 합니다.
    데이터베이스 버퍼 캐시(Database Buffer Cache) : 실제 데이터가 저장되어 있는 하드디스크의 데이터 파일에서 읽은 Data Block의 복사본을 저장하는 메모리 영역으로, 현재 또는 최근에 사용한 Datafile에서 읽은 Data Block의 복사본을 임시로 저장하는 공간으로 모든 사용자는 Database Buffer Cache에 있는 Data Block을 공유합니다.
    DB에서 동일한 데이터를 계속 읽어야 하는 경우 예를들어 “select * from emp” SQL구문이 반복해서 실행되는 경우 최초 읽을 때만 하드 디스크에 있는 Datafile에서 읽고, 그 다음부터는 Database Buffer Cache에서 읽음으로서 성능이 향상 됩니다.
    오라클에서 IO는 블록(Block) 단위로 일어나는데 하드디스크의 Datafile에서 Database Buffer Cache로 읽어들일때도 Block단위로 Database Buffer Cache에서 Datafile로 쓸 때도 Block 단위로 작업이 이루어 집니다. SQL쿼리문의 성능은 작업대상이 되는 Block이 얼마나 되느냐에 달려 있는데 쿼리가 서로 다르더라도 읽어들인 Block수가 동일하다면 동일한 성능이라고 볼 수 있습니다.
    Database Buffer Cache의 모든 Block은 어떤 상태를 가지는데 현재 어떤 사용자가 사용(수정중, 읽기중)하고 있는 Pinned Buffer는 다른 사용자들은 자유롭게 읽을 수 있지만 이 내용을 수정할 수는 없고 삭제 될 수도 없습니다. Database Buffer Cache에서 Lock은 특별히 Pin 이라고 하며 읽기중이면 Share Lock, 수정중이면 Exclusive Lock이 걸립니다.
    Block이 수정되었지만 아직 하드디스크의 Datafile에 쓰여지지 않은 Dirty Buffer, DB 기동이후 한번도 사용 안되었거나 Dirty Buffer의 내용이 정상적으로 Datafile에 쓰여져서 다른 사용자들이 수정, 삭제가 가능한 상태가 된 Free Buffer 3가지 상태를 가집니다.
    리두 로그 버퍼(Redo Log Buffer) : DB의 모든 변경 사항에 대한 정보를 보유하는 SGA의 순환 버퍼입니다. SELECT이외의 DML, DDL에 의해 변경된 모든 변경사항들을 기록하는데, DB가 비정상적인 종료로 인해 복구가 필요한 경우 이 정보를 이용합니다. DB의 모든 트랜잭션 정보를 Redo Log Buffer에서 하드 디스크의 Redo Log File에 저장해 둠으로써 시스템 장애시 트랜잭션의 일관성을 잃지 않고 데이터베이스를 복구할 수 있습니다.
    LGWR 백그라운드 프로세스는 Redo Log Buffer의 내용을 하드디스크의 Redo Log File에 기록하는 일을 합니다.
    플래시백 버퍼(Flashback Buffer) : SGA의 선택적 구성요소로 특정 시간대로의 복구등을 위해 Flashback Database가 활성화되면 백그라운드에 Recovery Writer Process(RVWR)라는 프로세스가 시작되고 RVWR은 복구를 위해 주기적으로 수정된 블록을 Flashback Buffer로 복사합니다. 순환적으로 재사용되는 Flashback Database의 로그정보들 입니다.
    데이터베이스 스마트 플래시 캐시(Database Smart Flash cache) : 선택적 영역으로 Solaris 또는 Oracle Linux에서 실행됩니다. Oracle 11g R2부터 추가되었으며 Database Buffer Cache가 LRU 알고리즘에 따라 Free Buffer가 부족한 경우 자주 사용안되는 블록들이 Aging Out 되어 디스크로 내려가는 단점을 보완 하는 기능 입니다. Database Buffer Cache에서 Aging Out 되더라도 성능이 우수한 Flash Disk(SSD)로 내려가는 개념으로 Data Block에 대해 Database Buffer Cache외 2차 캐싱 기능을 제공하므로 응답 시간을 보다 향상시킬 수 있습니다. Flash Cache는 일반적으로 추가적인 메인 메모리보다 경제적이며 훨씬 빠릅니다.
    라지 풀(Large Pool) : Shared Server Mode에서 세션메모리나 멀티 Database의 분산트랜잭션을 사용할 때 Oracle XA 연결을 위해 사용되는 UGA를 위해 Large Pool을 사용 합니다. 또한 I/O 서버 프로세스 및 쿼리 작업에 사용되는 메시지 버퍼와 같은 특정 대형 프로세스에 대해 사용되거나 복구작업을 위해 사용되는 복구관리자(Recovery Manager, RMAN)의 버퍼로 사용되는 I/O Buffer Area로 SGA내 선택적 영역 입니다.
    메모리 내 영역(In Memory Area) : 오라클 12C 이후 지원하는 SGA 내의 정적 풀로 In-Memory Column Store를 포함하고 있습니다. Row Format 방식에 Column Format 방식을 추가로 지원해 OLTP, DW 업무가 혼재된 시스템에서 트랜잭션 처리와, 데이터 분석 등의 업무를 지원합니다.
    In-Memory Column Store는 빠른 스캔에 최적화된 열 형식(Column Format)을 사용하여 메모리에 테이블과 파티션을 저장하는데, In-Memory Column Store를 활성화 하면 오라클은 In Memory Area와 Database Buffer Cache 별도의 공간에서 데이터를 관리 합니다.
    In-Memory Column Store는 데이터를 열 형식(Column Format)으로 인코딩 하고 컬럼의 값이 연속적으로 저장되어 분석쿼리에 최적화 됩니다. Database Buffer Cache에는 기존의 행 형식(Row Format)으로 데이터를 저장하는데 데이터 블록은 연속적으로 행을 저장하여 트랜잭션에 최적화 됩니다.
    Memoptimize Pool : ORACLE 19C에 등장한 키 기반 쿼리에 대해 고성능 및 확장성을 제공하는 선택적 구성 요소로 Memoptimize Buffer Area과 Hash Index 두 부분으로 구성됩니다. MEMOPTIMIZE FOR READ가 활성화된 테이블의 블록에 대한 빠른 액세스를 제공하는 Memoptimize Pool의 해시 인덱스 구조를 사용합니다. 즉 MEMOPTIMIZE FOR READ로 지정된 힙 구성 테이블에 대한 버퍼 및 관련 구조를 저장합니다.
    SELECT * FROM EMP WHERE EMPNO = 7966 과 같은 키 기반 쿼리에 대한 고성능 및 확장성을 제공합니다. 종단 간 응답 시간을 줄이기 위해 클라이언트는 CPU 및 운영 체제를 피하면서 네트워크를 통해 SGA에서 직접 요청된 버퍼를 가져오므로 SQL 애플리케이션은 코드 변경 없이 Memoptimize Pool의 이점을 누릴 수 있습니다.
    공유 I/O Pool(Shared I/O Pool, SecureFiles) : SecureFile LOB(Large Objects)에 대한 대규모 I/O 작업에 사용됩니다. SecureFile은 새로워진 LOB, 차세대 LOB로 보시면 되는데 이미지, 오디오, 비디오등 비정형 데이터 관리를 위해 오라클 11g 이후에 도입되었습니다. 기존 LOB와는 다르게 새롭게 제시된 기술 입니다.
    스트림 풀(Streams Pool) : SGA내부의 선택적 메모리 영역으로 Oracle Streams에서 버퍼링 된 큐메시지를 저장하거나 Oracle Streams 프로세스용 메모리 공간 입니다. Oracle Streams는 주로 2개의 DB 동기화를 위해 사용하는 기술 입니다.

Комментарии • 1

  • @wolfrobot6436
    @wolfrobot6436 Год назад

    좋은정보 감사드립니다! 간단명쾌하게 정리되어 이해가 잘되네요!