서버프로세스
구문분석
SQL문의 문법을 확인 (키워드 검사)
테이블명, 칼럼명, 데이터 타입 확인 (의미 검사)
SQL문을 실행한 계정의 권한 확인 (권한 검사)
Shared Pool의 라이브러리캐시에 해당 쿼리 저장 (쿼리 재사용을 위해)
입력할 데이터를 리두로그버퍼와 DB버퍼캐시에 기록
백그라운드 프로세스
LGWR (Log writer)
서버프로세스
구문분석
SQL문의 문법을 확인 (키워드 검사)
테이블명, 칼럼명, 데이터 타입 확인 (의미 검사)
SQL문을 실행한 계정의 권한 확인 (권한 검사)
라이브러리캐시에 SQL 존재하는지 확인
있으면 곧바로 실행 (소프트 파싱)
없으면 옵티마이저가 최적화 과정을 거쳐 실행계획 생성 (하드 파싱)
테이블, 인덱스, 칼럼에 대한 통계정보 존재하는지 확인
인덱스가 존재한다면 어떤 인덱스가 최적인지
CPU를 많이 소모하는 작업
Shared Pool의 라이브러리 캐시에 쿼리와 실행계획 저장 (쿼리 재사용을 위해서)
DB버퍼캐시에 해당 테이블의 데이터 있는지 확인
DB버퍼캐시의 데이터 중 원하는 결과만 추출하여 유저프로세스로 전송 (블록 단위)
SELECT문 논리적 실행순서
FROM
-> WHERE
-> GROUP BY
-> HAVING
-> SELECT
-> ORDER BY
서버프로세스
구문분석
SQL문의 문법을 확인 (키워드 검사)
테이블명, 칼럼명, 데이터 타입 확인 (의미 검사)
SQL문을 실행한 계정의 권한 확인 (권한 검사)
Shared Pool의 라이브러리캐시에 해당 쿼리 저장 (쿼리 재사용을 위해)
DB버퍼캐시에 해당 테이블의 데이터 있는지 확인
입력할 데이터를 리두로그버퍼와 DB버퍼캐시에 기록
백그라운드 프로세스
오라클은 갑작스러운 장애 발생시 백업된 데이터파일에 리두로그버퍼를 합쳐서 데이터를 복구한다.
리두로그버퍼에서 리두로그파일로 저장되는 시점
버퍼상태
Pinnded 버퍼 : 현재 사용중인 버퍼, 변경을 했지만 아직 COMMIT은 되지 않은 상태
Dirty 버퍼 : COMMIT을 했지만 아직 데이터파일로 저장은 되지 않은 상태
Free 버퍼 : 사용가능한 버퍼, 데이터가 데이터파일로 저장되었거나 사용되지 않은 상태
DB버퍼캐시의 데이터가 데이터파일로 저장되는 경우
라이브러리캐시
딕셔너리캐시
테이블 스페이스 : 세그먼트를 담는 콘테이너
세그먼트 : 데이터 저장공간이 필요한 오브젝트 (테이블, 인덱스, 파티션 등)
익스텐트 : 공간을 확장하는 단위, 연속된 블록 집합
블록 : 데이터를 읽고 쓰는 단위
데이터 파일 : 디스크 상의 물리적인 OS 파일