SELECT가 발생하는 과정
- 구문 분석
- SQL 문법에 맞는지, 테이블이나 뷰 등이 존재하는지 확인한다.
- 실행계획도 찾는다.
- 실행
- 데이터베이스 버퍼 캐시에 해당 데이터가 존재하는지 확인한다. 없다면 새롭게 데이터 파일을 읽어서 데이터베이스 버퍼 캐시에 저장해놓는다.
- INSERT, UPDATE, DELETE라면 데이터베이스 버퍼 캐시의 데이터가 바뀐다.
- 인출
- 데이터베이스 버퍼 캐시에서 해당 데이터를 읽어 클라이언트 단에 출력한다.
- INSERT, UPDATE, DELETE에서는 인출 단계가 없다.
출처 : https://dataonair.or.kr/db-tech-reference/d-story/db-tuning-service/?mod=document&uid=42394
DML이 발생하는 과정
- 데이터 파일로 테이블을 읽고, ROLLBACK을 위해서 데이터베이스로부터 언두 세그먼트를 읽는다. 그리고 데이터베이스 버퍼 캐시에 저장한다.
- 안전하게 ROW을 변경하기 위해 LOCK을 건다.
- TX Lock(트랜잭션 Lock) - ROW LOCK
- TL(Table Locks)
- 복구를 위해 리두로그 버퍼에는 DML 전후 정보가 모두 저장된다.
출처 : https://dataonair.or.kr/db-tech-reference/d-story/db-tuning-service/?mod=document&uid=42396
COMMIT이 발생하는 과정
- COMMIT을 입력한다.
- 리두로그 버퍼에는 DML 전후 데이터가 존재하는데, 그곳에 시스템 변경 번호(System Change Number)을 준다. LGWR는 리두로그 파일에 변경 데이터를 저장한다.
- 서버 프로세스는 유저 프로세스에게 Committed 메시지를 전송하여, 클라이언트 단에 메시지를 출력한다.
- 리두로그 파일이 꽉 차있다면 Log Switch가 일어난다. (라운드로빈)
- 체크포인트 프로세스가 컨트롤 파일과 데이터 파일의 헤드 영역에 시스템 변경 번호와 관련 상태 정보를 저장한다. → 체크포인트 이벤트
- DBWR가 데이터베이스 버퍼 캐시에 있는 정보를 테이블에 저장한다.
출처 : https://dataonair.or.kr/db-tech-reference/d-story/db-tuning-service/?mod=document&uid=42397