DB0-2주차 [Oracle Study]

Oracle을 알기 위해 주최 및 진행하고 있습니다 🙂
스터디의 2주차 정리입니다. (스터디는 초보자를 위한 Oracle 12c DBA 편 도서를 기반으로 진행되었습니다.)

유저 프로세스 와 서버 프로세스

  • 유저(사용자)가 SQL*Plus등을 통하여 세션을 맺을려고 하면 해당 클라이언트 시스템에 유저 프로세스가 기동되며, 서버에는 서버 프로세스가 생성된다.
  • 유저 프로세스는 해당 세션 정보와 실행된 SQL 정보를 가지고 데이터베이스 서버로 해당 SQL 수행을 요청한다. → 서버 프로세스는 유저 프로세스로부터 받은 정보를 PGA에 저장

파싱(Parsing)

  • 서버 프로세스는 shared pool의 라이브러리 캐쉬에 해당 SQL에 대해 파싱을 의뢰

-문장 확인(Syntax Check)

-Semantic 확인(Database Resolution)

  • 검색

-Optimization -TM 락

데이터 버퍼 캐쉬 검색

  • 파싱 단계가 완료되면, 서버 프로세스는 데이터 버퍼 캐시에서 해당 SQL 문에 필요한 데이터 블록을 검색합니다. 만약 데이터 블록이 데이터 버퍼 캐시에 존재하면 이를 사용하고, 존재하지 않을 경우 데이터 파일에서 해당 데이터 블록을 접근하여 데이터 버퍼 캐시에 적재합니다.

대상 락(Lock) 처리

  • 실제 변경을 수행하고자 하는 행에 대해 락(Lock)을 수행한다. (=TX 모드)
    • TX락이 발생할 경우 다른 사용자들은 해당 데이터를 변경하기 위해서는 앞에서 수행된 TX락이 종료될 때까지 대기해야 한다.

로그 기록

Write-Ahead 로깅 기법에 의해 리두 로그 버퍼에 변경내용을 기록

  • 변경 전 및 변경 후 데이터 값 정보를 리두 로그 버퍼에 기록합니다.

변경 전 이미지 저장 준비

  • 변경이 발생할 데이터에 대해 이전 데이터를 저장한다. -이전 이미지를 저장하기 위해 언두 테이블스페이스의 언두 세그먼트에서 언두 블록을 할당받아야 한다.
    • 롤백 수행 지원
    • 읽기 일관성 지원
    • 인스턴스 복구수행

변경 전 이미지 저장 및 실제 작업 수행

이전 데이터를 언두 블록에 저장 후 실제 DML (변경)작업을 수행

응답 수행

  • 서버 프로세스가 전달받은 세션 정보를 이용하여 작업을 요청했던 유저 프로세스에게 응답을 하게 된다.

커밋 발생 시

  • 리두 로그 버퍼에 존재하는 변경에 대한 로그를 리두 로그파일에 기록하며 (빠른 커밋), 데이터 버퍼 캐쉬에 존재하는 변경 데이터를 디스크에 저장하지는 않는다.(지연쓰기)

문장 확인(Syntax Check)

  • 정확한 구문을 이용하였는지 체크하는 절차
  • 문제가 없다면 ASCII 코드값으로 변환 → ASCII 코드값으로 동일 SQL문 판단 → 이러한 이유로 대, 소문자에 따라 SQL문 다르다고 판단

Semantic 확인

  • 데이터 딕셔너리 확인

-테이블 존재 여부 확인

-필요한 컬럼 존재 여부

-확인해당 테이블에 대한 권한 확인

검색

  • shared pool에서 이전에 수행된 SQL 파싱 정보 찾음

(서버 프로세스의 PGA에서 이미 수행된 SQL의 해쉬 값인 SQL ID값)

  • YES: 소프트 파싱 수행 → 기존 파싱 재사용
  • NO: 하드 파싱 → 파싱을 처음부터 수행

Optimization

  • 실행할 SQL 문을 어떤 방식으로 수행해야 가장 빠른 성능을 보장할 수 있을지 결정하여 실행 계획을 수립

데이터 파일 vs 리두 로그 파일

리두 로그 파일

  • 변경 내용을 순차적으로 기록
  • 데이터 파일에 비해 간단하게 처리

데이터 파일

  • 특정 데이터 블록을 찾아야 함
  • 전체 데이터 블록 업데이트 필요

데이터 딕셔너리 뷰와 동적 성능 뷰의 차이

데이터 딕셔너리 뷰

  • 시스템 테이블스페이스에 저장
  • 데이터베이스에 존재하는 오브젝트 및 관련 정보를 조회할 수 있는 뷰

이름 기준: DBA_, ALL_, USER_

구분내용예제
DBA_해당 데이터베이스에 존재하는 모든 정보 조회 가능DBA_TABLES
ALL_해당 유저에게 권한이 있는 모든 정보 조회 가능ALL_TABLES
USER_해당 유저가 소유한 모든 정보 조회 가능USER_TABLES

동적 성능 뷰

  • 메모리 상태 및 현재 세션에 대한 정보를 확인
  • 이름 기준: V$
참조 https://velog.io/@seonghae/SQL튜닝23.11.09 https://minisiri.tistory.com/13 https://kangkoon.blogspot.com/2015/02/1.html
위로 스크롤