RDB가 데이터에 접근하는 방법

RDB가 데이터에 접근하는 방법에 대해서 간략히 정리

쿼리 평가 엔진

  • RDB 에서 데이터 접근 절차를 결정하는 모듈
  • 사용자로부터 입력받은 SQL 구문(쿼리) 을 처음 읽어들이는 모듈
  • 쿼리 평가 모듈은 추가로 파서 또는 옵티마이저와 같은 여러 개의 서브 모듈로 구성

쿼리의 처리와 실제로 데이터 접근이 이루어지는 큰 그림

  • 파서(parser)

    • 파서(사진에서 1) 의 역할은 이름 그대로 파서(구문 분석)
    • 사용자로부터 입력받은 SQL 구문이 구문적으로 옳은지 검사
    • SQL 구문을 정형적인 형식으로 변환. 그래야 DBMS 내부에서 일어나는 후속 처리가 효율화됨
  • 옵티마이저(optimizer)

    • 최적화
    • 최적화의 대상은 데이터 접근법(실행 게획)
    • DBMS 두뇌의 핵심
    • 인덱스 유무, 데이터 분산 또는 편향 정도, DBMS 내부 매개변수 등의 조건을 고려해서, 선택 가능한 많은 실행 계획을 작성하고(2), 이들의 비용을 연산하고(3), 가장 낮은 비용을 가진 실행 계획을 선택
  • 카탈로그 매니저(catalog manager)

    • 통계 정보
    • 옵티마이저가 실행 계획을 세울 때 옵티마이저에 중요한 정보를 제공
    • 카탈로그란 DBMS의 내부 정보를 모아놓은 테이블들
    • 테이블 또는 인덱스의 통계 정보가 저장. 이 정보들은 데이터베이스 엔지니어가 항상 신경써줘야 한다.
    • 통계 정보 예시

      • 각 테이블의 레코드 수
      • 각 테이블의 필드 수와 필드의 크기
      • 필드의 카디널리티(값의 개수)
      • 필드값의 히스토그램(어떤 값이 얼마나 분포되어 있는가)
      • 필두 내부에 있는 NULL 수
      • 인덱스 정보
    • 문제 발생

      • 카탈로그 정보가 테이블 또는 인덱스의 실제와 일치하지 않을 때. 테이블에 데이터 삽입/갱신/제거가 수행될 때 카탈로그 정보가 갱신되지 않는다면, 옵티마이저는 오래된 정보를 바탕으로 실행 계획을 세우게 된다.
      • 극단적인 예를 들어, 테이블을 만들면 일단 레코드 0개의 상태로 카탈로그 정보가 저장된다. 그런데 이후에 1억 건의 데이터를 올리고 카탈로그 정보를 갱신하지 않는다면 옵티마이저는 데이터 0개를 기준으로 플랜을 생성하게 된다.
    • 갱신 처리가 수행되는 시점에 자동으로 통계 정보를 갱싱하는 DBMS들이 종종 있다.
    • 통계 정보 갱신은 대상 테이블 또는 인덱스의 크기, 수에 따라 몇십 분에서 몇 시간이 소요되기도 하는, 실행 비용이 굉장히 높은 작업. 하지만 DBMS가 최적의 플랜을 선택하기 위해 필요한 조건이고 갱신 시점을 확실하게 검토해야 한다.
    • MySQL 통계 정보 갱신 명령어

      ANALYZE TABLE [스키마 이름].[테이블 이름];
  • 플랜 평가(plan evaluation)

    • 옵티마이저가 SQL 구문에서 여러 개의 실행 계획을 세운 뒤 그것을 받아 최적의 실행 결과를 선택하는 것
    • 하나의 실행 계획을 선택하면, 이후에 DBMS는 실행 계획을 절차적인 코드로 변환하고 데이터 접근을 수행

(책)DB 성능 최적화를 위한 SQL 실전 가이드 SQL 레벨업 - 미크


Written by@[June]
Backend Developer