DB&SQL

오라클 아키텍처 - DML 실행 프로세스

초롱불 2024. 5. 14. 12:24

DML 실행 프로세스 개요

DML 실행 프로세스는 Shared Pool에 데이터가 있는지 체크한 뒤 Buffer Chache와 Undo Segments를 체크하여 요청 관련 블록을 카피 변경 잠금하는 과정을 거친다. 이후 커밋이 이루어질 경우 Redo Log를 기록하고 디스크에 변경 사항을 반영하는 과정을 거친다.

 

Shared Pool Check

우선 서버는 라이브러리 캐시 내에 유사 SQL 문장이 있는지 검사한다. 이미 존재한다면 같은 쿼리를 파싱할 필요가 없기에 비용을 아낄 수 있다. 다음으로 데이터 딕셔너리 캐시를 확인한다. 관련 테이블 정보가 있다면 관련 테이블의 권한이나 정의를 가져올 비용을 아낄 수 있다. 두 캐시에 관련 데이터가 없을 경우 디스크에서 데이터를 읽어들여 캐시 영역에 쓴다.

 

Buffer Cache & Undo Segments Check

이후 데이터가 준비되면 쿼리의 유효성을 먼저 검사한다. 모든 검사가 끝나면 버퍼 캐시와 언두 세그먼트에서 관련데이터를 확인한다. 버퍼 캐시는 변경 요청 데이터 블록을 카피하여 변경사학과 함께 기록한다. 관련 데이터가 버퍼 캐시에 쓰여진 것이 확실한지 확인한 뒤에 관련 블록은 다른 사용자가 변경할 수 없게 잠근다(Lock). 모든 변경 사항은 버퍼 캐시의 관련 블록에 기록된다. 이 변경된 블록을 '더티 블록'이라고 한다.

 

더불어 변경 사항이 발생하기 전에 관련 Redo 로그 데이터를 Redo Log Buffer에 기록한다. Rdo log가 생성되고 데이터 버퍼에 변경이 적용되면 서버는 사용자에게 영향을 받은 행의 수를 반환한다. 사용자는 계속해서 트랜잭션 데이터를 수정할 수 있다. 같은 블록에 새로운 수정요청이 있다면 이들도 버퍼 캐시에서 처리된다. 새로운 데이터가 필요할 경우 디스크에서 가져와 마찬가지의 작업을 거친다.

 

Commit

사용자가 변경 사항을 커밋할 시 다음 단계가 차례로 실행된다. Redo Log Buffer는 Redo Log 파일에 기록하면서 시스템 변경 번호(SCN)를 할당한다. 시스템 변경 번호는 해당 날짜의 타임스탬프를 포함하는 고유번호이다. 서버는 현재 시스템 변경 번호로 커밋 레코드를 Redo Log Buffer에 생성한다. 그런 다음 로그 작성 프로세스가 더티 블록을 디스크에 기록하고 서버는 관련 블록 잠금을 해제한다.

 

결론

DML이 일어나는 경우의 프로세스를 알아보았다. SQL TUNING의 측면에서 어떻게 활용될 수 있을지 알 수 없는 부분이 많으나 데이터베이스를 가능한 정교하게 만드려는 노력이 엿보이는 측면으로 느껴졌다.

 

 

* Udemy SQL 관련 강의 정의글입니다.