IT/데이터자격증 기록
Oracle 아키텍처 구조 설명과 흐름
JJo
2018. 10. 10. 17:18
SQLP자격증 공부를 위해 오라클공부를 하면서 가장 중요한 오라클아키텍처
아래와 같은 순서로 정리(네이버 블로그에 기록해두었던거 옮겼습니다.)
- 전체적인 구조
- 각각의 역할
- 돌아가는 흐름(데이터검색:Select / DML:Insert)
1. 전체적인구조
- 1 - Memory 영역
- 2 - Process 영역
- 3 - File 영역
- 1 + 2 = Instance
2. 각각의 역할
- Shared Pool : Library Cache와 Data Dictionary Cache로 구성되어있는 메모리 영역
- Library Cache : 실행코드와 실행계획을 저장하는 공간
- Dictionary Cache : 테이블,인덱스,함수등의 메타정보를 저장하는 공간
- DB Buffer Cache : 최근에 사용된 Data Block이 저장되는 메모리 영역(최근에 사용되지 않은 데이터블록부터 디스크에 쓰여지는 LRU알고리즘 사용)
- Redo Log Buffer : 데이터의 변경사항이 생길경우 장애복구를 위해 해당변경 내용을 기록해두는 메모리영역
- Server Process : SQL문을 처리하는 Process로 오라클 Client에게 직접 서비스를 수행하는 Process
- DBWn : DB Buffer Cache에 수정된 블록의 내용을 데이터파일에 기록.
하고 필요한 경우 데이터파일에서 데이터를 가져오는 Process-> 잘못된거 서버프로세스가 data file에서 올린다 - LGWR : DB Buffer Cache에 발생한 모든변화를 기록하는 역할 (서버 Process가 시키거나 Commit후 Redo Log File에 기록,DBWr이 디스크에 내리기전이라도 Commit이 되어있으면 Redo Log file 이용해 복구)
- ARCn : Rog Switch가 발생(이 때 체크포인트 발생) 시 Redo Log File을 Archived Log File로 복사
- CKPT : Memory내의 데이터와 데이터 파일에 저장된 데이터를 일치시키도록 DBWn에게 명령을 하고 체크포인트가 발생하면 데이터파일과 컨트롤파일의 헤더를 갱신
- PMON : 정상적으로 작동하지 않는 프로세스들을 감시하여 종료시킴
- SMON : 오라클 Instance를 복구하며 관리하는 역할
3. 돌아가는 흐름 (데이터검색:Select / DML:Insert)
먼저 오라클 Clientt가 접속을 하면 1개의 Server Process 생성, 그리고 이 Server Process는 SGA를 생성한다.
- 데이터검색:Select
오라클 Client가 Select절을 날리면 Server Process는 Shared Pool에 Library Cache를 확인해 실행계획이 있으면 soft파싱
없으면 옵티마이저가 실행계획을 만들며 hard파싱을 하게된다. 그리고 Server Process는 DB Buffer Cache를 읽어 select절에 해당하는 데이터가 있으면 DB Buffer Cache에서 바로 읽고 해당결과를 오라클 Client에게 보여주고 없으면
Server Process가 Data File로부터 읽어와 DB Buffer Cache에 올리고 오라클 Client에게 보여준다
- DML:Insert
오라클 Client가 Insert문을 날리면 Server Process가 DB Buffer Cache에 데이터를 담는다. 데이터를 담을 때 LGWR은 그 변경내용을 Redo Log Buffer에 담게 된다. (이 때 시스템이 죽는경우 DWBn이 Data file 내리기전이라도 commit이 되어있으면 리두로그파일을 이용해 복구 가능 / 만약 commit이 안되어있으면 Redo Log Buffer의 undo를 이용해 복구) 그리고 Redo Log Buffer에 담긴 내용은 commit하거나 특정시간마다 LGWR이 Redo Log File에 내린다.
이 후 DBWn은 바로 Data File에 내리지 않고 체크포인트가 발생 시 DB Buffer Cache상에 모든 Dirty버퍼를 Data File에 저장한다.
- LGWR 이 Redo log file 로 기록하는 경우
1. 3초마다
2. Redo log buffer 의 전체크기의 1/3 이 찼거나 1M 이 넘을 경우
3. 사용자가 commit 또는 rollback 을 수행할 때
4. DBWR 이 LGWR 에게 쓰기를 요청할 때