SQL의 모든 것/SQL의 이론 및 기초

SQL 수행 아키텍처(INSERT, SELECT, UPDATE)

IT너드남 2024. 1. 25. 00:08

INSERT문 실행 시 내부동작

→ SQL문 실행

1. 서버프로세스

● 구문분석

    ○ SQL문의 문법을 확인(키워드 검사)

    ○ 테이블명, 컬럼명, 데이터 타입 확인(의미 검사)

   ○ SQL문을 실행한 계정의 권한 확인(권한 검사)

● Shared Pool의 라이브러리 캐시에 해당 쿼리 저장(쿼리 재사용 위해)

● 입력할 데이터를 리두로그버퍼와 DB버퍼캐시에 기록

2. COMMIT 실행

● 백그라운드 프로세스

LGWR (Log Writer)

    ○ 리두로그버퍼 데이터 → 리두로그파일로 저장

     DB버퍼캐시 상태 변경 (Pinned --> Dirty)

     Checkpointer가 DBWR에게 데이터 저장 신호 전달

     DBWR가 DB버퍼캐시 데이터 --> 데이터파일로 저장

 

SELECT문 실행 시 내부동작

→ SQL문 실행

1. 서버프로세스

● 구문분석

    ○ SQL문의 문법을 확인(키워드 검사)

    ○ 테이블명, 컬럼명, 데이터 타입 확인(의미 검사)

    ○ SQL문을 실행한 계정의 권한 확인(권한 검사)

     라이브러리캐시에 SQL 존재하는지 확인

        ■ 있으면 곧바로 실행(소프트 파싱)

             bind변수만 달라졌을 경우 소프트 파싱

         없으면 옵티마이저가 최적화 과정을 거쳐 실행계획 생성(하드 파싱)

             테이블, 인덱스, 컬럼에 대한 통계정보 존재하는지 확인

             인덱스가 존재한다면 어떤 인덱스가 최적인지

             CPU를 많이 소모하는 작업

● Shared Pool의 라이브러리 캐시에 해당 쿼리와 실행계획 저장(쿼리 재사용 위해)

● DB버퍼캐시에 해당 테이블의 데이터 있는지 확인

     있으면 캐시에서 데이터 접근(메모리 I/O)

     없으면 디스크에 접근해서 해당 테이블 데이터를 DB버퍼캐시로 복사(디스크 I/O)

 DB버퍼캐시의 데이터 중 원하는 결과만 추출하여 유저 프로세스로 전송(블록 단위)

 SELECT문 논리적 실행 순서

     FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY

 

UPDATE문 실행 시 내부동작

→ SQL문 실행

1. 서버프로세스

● 구문분석

    ○ SQL문의 문법을 확인(키워드 검사)

    ○ 테이블명, 컬럼명, 데이터 타입 확인(의미 검사)

    ○ SQL문을 실행한 계정의 권한 확인(권한 검사)

● Shared Pool의 라이브러리 캐시에 해당 쿼리와 실행계획 저장(쿼리 재사용 위해)

● DB버퍼캐시에 해당 테이블의 데이터 있는지 확인

    ○ 없으면 디스크에 접근해서 해당 테이블 데이터를 DB버퍼캐시로 복사(디스크 I/O)

     DB버퍼캐시에 변경 조건에 맞게 데이터 수정

● 입력할 데이터를 리두로그버퍼와 DB버퍼캐시에 기록

 

2. COMMIT 실행

● 백그라운드 프로세스

LGWR (Log Writer)

    ○ 리두로그버퍼 데이터 → 리두로그파일로 저장

     DB버퍼캐시 상태 변경 (Pinned --> Dirty)

     Checkpointer가 DBWR에게 데이터 저장 신호 전달

     DBWR가 DB버퍼캐시 데이터 --> 데이터파일로 저장

 

용어 설명

리두로그버퍼

 오라클은 갑작스러운 장애 발생시 백업된 데이터파일에 리두로그버퍼를 합쳐서 데이터를 복구한다.

● 리두로그버퍼에서 리두로그파일로 저장되는 시점

 

DB버퍼캐시

● Pinnded 버퍼 : 현재 사용중인 버퍼, 변경을 했지만 아직 COMMIT은 되지 않은 상태

● Dirty 버퍼 : COMMIT을 했지만 아직 데이터파일로 저장은 되지 않은 상태

    ○ 리두로그파일에는 저장되었지만 데이터파일에는 저장이 되지 않은 상태

 Free 버퍼 : 사용가능한 버퍼, 데이터가 데이터파일로 저장되었꺼나 사용되지 않은 상태

 

DB버퍼캐시의 데이터가 데이터파일로 저장되는 경우

 Checkpoint  신호가 발생했을 때

 DDL명령이 실행될 때

 

Shared Pool

라이브러리캐시

 파싱된 SQL문과 실행계획을 매핑하여 저장

 캐시 공간이 부족하면 버려졌다가 다시 하드파싱 후 저장된다.

 

딕셔너리캐시

 오라클의 모든 객체(테이블, 뷰, 인덱스, 시퀸스 등)에 대한 정보들을 저장

 테이블 데이터를 찾을 때 그 시작점이 된다.

 

소프트파싱과 하드파싱

 

데이터 저장구조

테이블 스페이스 : 세그먼트를 담는 컨테이너

세그먼트 : 데이터 저장공간이 필요한 오브젝트(테이블, 인덱스, 파티션 등)

익스텐트 : 공간을 확장하는 단위, 연속된 블록 집합

블록 : 데이터를 읽고 쓰는 단위

데이터 파일 : 디스크 상의 물리적인 OS 파일

데이터 저장구조