반응형
□ 오라클 구조
□ Oracle Server : Instance + Database
□ Instance : SGA + Background Process
□ Database : Datafile + Control File + RedoLog File
□ SGA : Shared Pool + Database Buffer Cache + Redo Log Buffer ( + Java Pool + Large Pool )
- SGA 값 변경후 재부팅 없이 적용가능
- SGA_MAX_SIZE로 크기 조절가능
- SGA_MAX_SIZE > 1G : 1 granule = 16M (9i에서는 128M를 기준으로 나뉜다)
- SGA_MAX_SIZE <= 1G : 1 granule = 4M
□ Background Process : PMON + SMON + DBWR + LGWR + CKPT + Others
□ Shared Pool : Library Cache + Data Dictionary Cache
- 최근 가장 많이 사용된 SQL, DATA가 저장되는 공간
- SHARED_POOL_SIZE로 크기 조절가능
□ Library Cache
- SQL, PL/SQL, 실행계획, Parse Code가 저장되는 공간
- LRU 알고리즘 적용
- 메모리 크기는 Shared Pool 크기에 따라 조절된다.
□ Data Dictionary Cache(=Row Cache) : 빈번하게 사용되는 Data Dictionary의 데이터 일부를 저장하는 공간
□ Data Buffer Cache
- SQL 실행작업과 관련된 Data file의 복사본 중 일부가 저장되는 공간
- LRU 알고리즘 적용
- DB_CACHE_SIZE의 설정을 통해 변경 가능(단, 시스템의 가용용량이 존재할 때 가능하다)
- DB_BLOCK_SIZE의 크기에 따라 데이터 저장
□ Redo Log Buffer
- 복구를 위해 사용되는 공간
- 데이터베이스의 모든 변경사항이 저장(DML 작업, Select 작업은 제외)
- LOG_BUFFER을 이용하여 크기조절(단, 인스턴스의 재시작 후 적용된다)
□ Large Pool : Optional 메모리공간, 대용량 메모리 할당이 필요할 때 사용(백업/복구 등)
□ Java Pool : Java 코드가 사용하는 메모리 공간, 잘 사용되지 않음
□ 메모리구조 : SGA + PGA
□ SGA(System Global Area, Shared Global Area) : 인스턴스가 최초 시작될 때 생성되며, 모든 서버 프로세스가 공유하는 메모리 영역
□ PGA(Program Global Area, Private Global Area) : 서버 프로세스가 생성될 때 생성되는 메모리 영역으로, 해당 서버프로세스 단독사용
□ 프로세스 구조
- 사용자 프로세스(User Process) : 오라클 서버에 접속을 요청하기 위한 프로세스
- 서버 프로세스(Server Process) : 사용자 프로세스와 오라클 인스턴스간에 연결을 맺고, 세션을 유지시키는 프로세스
- 백그라운드 프로세스(Background Process) : 오라클 인스턴스 생성 시 같이 시작되는 프로세스
□ User Process : 오라클 서버에 접속 요청을 하는 프로그램, Server Process와 연결을 통해 오라클 서버에 명령을 전달한다.
□ Server Process
- User Process와 오라클 인스턴스간에 연결을 맺고, User Process의 요청을 처리하거나 오라클 인스턴스에 전달하는 프로세스
- Dedicated 와 Shared Server로 구분
□ Background Process : 물리적 데이터파일과 메모리 구조 사이의 관계를 관리하는 프로세스
- 필수 : DBWR, PMON, CKPT, LGWR, SMON
- 옵션 : ARCn, RECO, LMON, LMDn 등
□ DBWR(Dtabase Writer) : Data Buffer Cache의 변경된 Data를 디스크에 저장
- 디스크에 내려쓰는 시기 : Checkpoint 신호 발생 시, Dirty Buffer의 임계값이 1/3에 도달 시, 3초에 한번 씩, Free Buffer 가 없을 때 등
- DBWR이 자주 내려쓸 수록 I/O가 증가해 오라클 서버 성능이 저하된다.
- Data Buffer Cache의 크기가 클 수록 Free Buffer의 검색시간이 증가해 성능이 저하된다.
□ LGWR(Log Writer) : 데이터베이스의 모든 변경사항을 Redo Log file에 저장하는 프로세스
- 디스크에 내려쓰는 시기 : Commit 발생 시, 버퍼 중 1/3가 찼을 때, 버퍼 사용량이 1MB를 넘겼을 때, 3초에 한번 씩, DBWR 작동 전에(선로그 기법)
□ SMON(System Monitor) : 비정상 종료된 서버(Instance Crash) 재시작 시 복구작업을 진행하는 프로세스(Instance Recovery)
□ PMON(Process Monitor)
- 모든 서버 프로세스의 원본
- 비정상적으로 종료된 서버프로세스 정리
- Listener의 요청 시 자신을 복제하여 Server Process 생성
□ CKPT(Checkpoint)
- Checkpoint 신호 발생
- Checkpoint 신호 발생 시 DBWR이 Database Buffer Cache의 내용을 디스크(데이터베이스)로 내려쓴다.
□ ARCn : Redo Log file이 모두 꽉 찼을 경우(Log Switch 발생) Archive file로 저장하는 프로세스, ArchiveLog mode로 운영 시에만 동작
□ 논리적인 구조
- Block → Extent → Segment → Datafile → Tablespace
□ SQL문의 처리 과정
- 구문분석(Parsing), 실행계획(Execute Plan) 작성 → 바인드(Bind) → 실행(Execute) → 인출(Fetch)
□ Oracle Server : Instance + Database
□ Instance : SGA + Background Process
□ Database : Datafile + Control File + RedoLog File
□ SGA : Shared Pool + Database Buffer Cache + Redo Log Buffer ( + Java Pool + Large Pool )
- SGA 값 변경후 재부팅 없이 적용가능
- SGA_MAX_SIZE로 크기 조절가능
- SGA_MAX_SIZE > 1G : 1 granule = 16M (9i에서는 128M를 기준으로 나뉜다)
- SGA_MAX_SIZE <= 1G : 1 granule = 4M
참고 : granule : SGA에서 메모리를 할당해 줄 수 있는 용량의 최소 단위
□ Background Process : PMON + SMON + DBWR + LGWR + CKPT + Others
□ Shared Pool : Library Cache + Data Dictionary Cache
- 최근 가장 많이 사용된 SQL, DATA가 저장되는 공간
- SHARED_POOL_SIZE로 크기 조절가능
□ Library Cache
- SQL, PL/SQL, 실행계획, Parse Code가 저장되는 공간
- LRU 알고리즘 적용
- 메모리 크기는 Shared Pool 크기에 따라 조절된다.
참고 : LRU 알고리즘
LRU(Least Recently Used)알고리즘은 기억장치 바깥으로 내보내야할 데이터를 선정할 때 가장 오랜 기간 사용되지 않았던 데이터부터 교체하는 알고리즘
□ Data Dictionary Cache(=Row Cache) : 빈번하게 사용되는 Data Dictionary의 데이터 일부를 저장하는 공간
□ Data Buffer Cache
- SQL 실행작업과 관련된 Data file의 복사본 중 일부가 저장되는 공간
- LRU 알고리즘 적용
- DB_CACHE_SIZE의 설정을 통해 변경 가능(단, 시스템의 가용용량이 존재할 때 가능하다)
- DB_BLOCK_SIZE의 크기에 따라 데이터 저장
참고 : DB_BLOCK_SIZE
- 오라클은 DB_BLOCK_SIZE 단위로 디스크(데이터베이스)와 메모리(인스턴스) 사이로 데이터를 전송한다.
- 블록사이즈는 DB생성 시 결정되며, 한번 설정된 이후에는 변경할 수 없다.
- 10g 기본 블록사이즈 : 8K / 9i 기본 블록사이즈 : 4K
□ Redo Log Buffer
- 복구를 위해 사용되는 공간
- 데이터베이스의 모든 변경사항이 저장(DML 작업, Select 작업은 제외)
- LOG_BUFFER을 이용하여 크기조절(단, 인스턴스의 재시작 후 적용된다)
□ Large Pool : Optional 메모리공간, 대용량 메모리 할당이 필요할 때 사용(백업/복구 등)
□ Java Pool : Java 코드가 사용하는 메모리 공간, 잘 사용되지 않음
□ 메모리구조 : SGA + PGA
□ SGA(System Global Area, Shared Global Area) : 인스턴스가 최초 시작될 때 생성되며, 모든 서버 프로세스가 공유하는 메모리 영역
□ PGA(Program Global Area, Private Global Area) : 서버 프로세스가 생성될 때 생성되는 메모리 영역으로, 해당 서버프로세스 단독사용
□ 프로세스 구조
- 사용자 프로세스(User Process) : 오라클 서버에 접속을 요청하기 위한 프로세스
- 서버 프로세스(Server Process) : 사용자 프로세스와 오라클 인스턴스간에 연결을 맺고, 세션을 유지시키는 프로세스
- 백그라운드 프로세스(Background Process) : 오라클 인스턴스 생성 시 같이 시작되는 프로세스
□ User Process : 오라클 서버에 접속 요청을 하는 프로그램, Server Process와 연결을 통해 오라클 서버에 명령을 전달한다.
□ Server Process
- User Process와 오라클 인스턴스간에 연결을 맺고, User Process의 요청을 처리하거나 오라클 인스턴스에 전달하는 프로세스
- Dedicated 와 Shared Server로 구분
참고 : Dedicated Server vs Shared Server
1. Dedicated Server : 1개 User Process당 1개의 Server Process 할당되는 방식(관리용이, 메모리 성능 저하)
2. Shared Server :1개 Server Process가 다수의 User Process 처리(메모리 성능 향상, 비정상적인 서버 프로세스는 다수 User Process에 악영향)
□ Background Process : 물리적 데이터파일과 메모리 구조 사이의 관계를 관리하는 프로세스
- 필수 : DBWR, PMON, CKPT, LGWR, SMON
- 옵션 : ARCn, RECO, LMON, LMDn 등
참고 : 백그라운드 프로세스 중 1개라도 죽으면 전체 서비스가 멈춘다
□ DBWR(Dtabase Writer) : Data Buffer Cache의 변경된 Data를 디스크에 저장
- 디스크에 내려쓰는 시기 : Checkpoint 신호 발생 시, Dirty Buffer의 임계값이 1/3에 도달 시, 3초에 한번 씩, Free Buffer 가 없을 때 등
- DBWR이 자주 내려쓸 수록 I/O가 증가해 오라클 서버 성능이 저하된다.
- Data Buffer Cache의 크기가 클 수록 Free Buffer의 검색시간이 증가해 성능이 저하된다.
참고 : Data Buffer Cache의 3가지 상태
1. Pinned Buffer : 현재 사용중인 상태
2. Dirty Buffer : 변경된 데이터 저장, Data File에는 아직 저장되지 않음
3. Free Buffer : Data File에 저장완료, 새로운 데이터 저장가능한 상태
□ LGWR(Log Writer) : 데이터베이스의 모든 변경사항을 Redo Log file에 저장하는 프로세스
- 디스크에 내려쓰는 시기 : Commit 발생 시, 버퍼 중 1/3가 찼을 때, 버퍼 사용량이 1MB를 넘겼을 때, 3초에 한번 씩, DBWR 작동 전에(선로그 기법)
□ SMON(System Monitor) : 비정상 종료된 서버(Instance Crash) 재시작 시 복구작업을 진행하는 프로세스(Instance Recovery)
□ PMON(Process Monitor)
- 모든 서버 프로세스의 원본
- 비정상적으로 종료된 서버프로세스 정리
- Listener의 요청 시 자신을 복제하여 Server Process 생성
□ CKPT(Checkpoint)
- Checkpoint 신호 발생
- Checkpoint 신호 발생 시 DBWR이 Database Buffer Cache의 내용을 디스크(데이터베이스)로 내려쓴다.
□ ARCn : Redo Log file이 모두 꽉 찼을 경우(Log Switch 발생) Archive file로 저장하는 프로세스, ArchiveLog mode로 운영 시에만 동작
□ 논리적인 구조
- Block → Extent → Segment → Datafile → Tablespace
□ SQL문의 처리 과정
- 구문분석(Parsing), 실행계획(Execute Plan) 작성 → 바인드(Bind) → 실행(Execute) → 인출(Fetch)
참고 : BIND
전체 SQL문 중 특정 컬럼값만 변경되고 전체적인 문법은 동일한 경우 Hard Parsing을 줄이기 위해 실행계획을 1개만 만드는 기법
예제 ) 게시판에서 키워드 검색(제목, 이름, 작성자 등), 로그인 등
select id, password from member where id=&id and password=&password;
반응형
'DB > Oracle Administrator' 카테고리의 다른 글
리눅스에서 오라클 삭제하는 방법 (0) | 2012.07.06 |
---|---|
오라클이 select를 처리하는 과정 (0) | 2012.07.06 |
튜닝 방법론 이해 (0) | 2012.07.06 |
SQL문 분석의 이해 (0) | 2012.07.06 |
SQL문처리과정 이해 (0) | 2012.07.06 |