worldint
mathengi
worldint
전체 방문자
오늘
어제
  • 분류 전체보기 (152)
    • infra, cloud (4)
      • aws (4)
    • TIL,WIL(일간,주간 회고) (57)
    • 컴퓨터 공학 (5)
      • 정보통신 (3)
      • 컴퓨터 구조 (2)
    • Math (1)
      • linear algebra (0)
      • 명제와 집합 (1)
      • Linux Ubuntu (0)
    • Operating System (9)
    • programming (63)
      • c , c++ (9)
      • c# (0)
      • java (2)
      • javascript (14)
      • Python (4)
      • github (1)
      • programing terms (12)
      • html, css (2)
      • docker (3)
      • algorithm_datastructure (4)
      • database (9)
      • flutter(dart) (2)
    • 항해99 부트캠프 (7)
      • 사전교육 (7)
    • IT English(개발관련 영어공부) (0)
    • 알고리즘 (1)
    • 보안관련 (1)

블로그 메뉴

    공지사항

    인기 글

    태그

    • node
    • MONGOOSE
    • ci/cd
    • CloudFront
    • MongoDB
    • EC2
    • 디비데드락
    • NVM
    • nodejs
    • flutter #provider #error
    • docker
    • AWS
    • NoSQL
    • Blue/Green
    • db데드락
    • Javascript
    • ec2 #코드디플로이 #리눅스

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    worldint

    mathengi

    데이터베이스 옵티마이저
    programming/database

    데이터베이스 옵티마이저

    2024. 12. 1. 10:20

     

    옵티마이저란?

    데이터베이스 옵티마이저(Database Optimizer)는

    데이터베이스에서 SQL 쿼리를 빠르고 효율적으로 실행하기 위해 최적의 실행 계획을 만들어준다

    옵티마이저의 목적은 쿼리 실행에 필요한 비용을 최소화하여 성능을 극대화하는 것이다

    이 비용에는 디스크 I/O, CPU 사용량, 네트워크 트래픽 등이 포함된다

     

     

    https://coding-factory.tistory.com/743

     

    옵티마이저의 종류

    1. 규칙 기반 옵티마이저(Rule-Based Optimizer, RBO):
      이 옵티마이저는 사전 정의된 규칙에 따라 쿼리를 최적화한다
      예를 들어, 특정한 형태의 쿼리에서는 항상 인덱스를 사용하는 방식으로 최적화하는 식
      이 방식은 상대적으로 간단하지만 최신 데이터베이스에서는 사용하지 않는다

      특정 우선순위

    2. 비용 기반 옵티마이저(Cost-Based Optimizer, CBO):
      대부분의 현대적인 데이터베이스 관리 시스템(DBMS)에서 사용되는 방법
      CBO는 테이블의 통계 정보와 실행 비용을 바탕으로 가장 효율적인 실행 계획을 선택한다
      테이블의 데이터 분포나 인덱스의 효율성 등을 고려하여 더 정교한 실행 계획을 수립
      통계정보는 딕셔너리라는곳에 저장,업데이트한다

     

    옵티마이저 동작 방식

    1. Parser : SQL문장의 문법, 구조를 분석하여 쿼리 트리 생성
      • 쿼리트리란
        ```
        SELECT name  
        FROM employees  
        WHERE department = 'IT';


        //위와 같은 쿼리가 들어오면 아래의 트리구조로 변경이됨

                    SELECT  
                      |  
                    FILTER (department = 'IT')  
                      |  
                   TABLE SCAN (employees)  

        ```
    2. Optimization
      1. Query Trasformer : 파싱된 SQL을 보고, 동일한 결과를 도출하는 더 좋은 쿼리가 있으면 그것으로 바꿈
      2. Estimator: 시스템 통계정보를 딕셔너리로부터(통계정보 저장하는 저장소)
        수집하여 SQL을 실행할 때 소요되는 총비용을 계산한다
      3. Plan Generator : Estimator를 통해 계산된 값들을 토대로 후보군이 되는 실행계획을 도출한다 
    3. Row-Source Genarator : 옵티마이저가 생성된 실행계획을 SQL 엔진이 실제 실행할 수 있는 코드나 프로시저 형태로 포맷팅 한다
      • postgresql을 예로들면 row-source genarator에 의해서 c언어로 된 함수가 생성되고, 그것을 엔진이 실행하는 형태라고 한다
    4. SQL Engine : sql을 실행합니다

    통계정보

    비용기반 옵티마이저에서 실행계획을 짜기 위해서 사용되는 정보이다

    특정 주기를 설정하여 디비가 자동으로 통계정보를 갱신하도록 할 수 도 있고

    사용자가 직접 만든 통계정보를 사용하도록 할 수도 있다

     

    통계정보요소

    테이블 크기 테이블에 저장된 총 레코드 수로, 테이블의 규모를 파악하여 최적의 접근 방식을 결정하는 데 사용된다
    데이터 분포 특정 열의 값들이 어떻게 분포되어 있는지를 나타내며, 선택도를 예측하여 최적의 인덱스 사용 여부를 결정한다
    인덱스 정보 인덱스가 어떤 열에 적용되었는지, 그리고 그 인덱스의 효율성을 평가하여 실행 계획을 수립하는 데 사용됨
    널 값 비율 특정 열에 널(null) 값이 얼마나 있는지를 나타내며, 옵티마이저가 조인이나 필터링 조건을 더 효율적으로 처리하도록 도움
    데이터 블록 수 테이블이나 인덱스를 저장하는 데 필요한 데이터 블록의 수로, I/O 비용을 예측하는 데 중요한 요소
    클러스터링 팩터 인덱스의 순서와 테이블의 실제 데이터 순서 간의 관계를 나타내며, 테이블에 대한 접근 비용을 추정하는 데 사용

    'programming > database' 카테고리의 다른 글

    데이터베이스 파티셔닝  (1) 2024.11.07
    데이터베이스 인덱스  (0) 2024.10.26
    데이터베이스 Lock의 종류  (0) 2024.10.26
    데이터베이스 정규화  (0) 2024.10.26
    디비 데드락  (0) 2024.10.19
      'programming/database' 카테고리의 다른 글
      • 데이터베이스 파티셔닝
      • 데이터베이스 인덱스
      • 데이터베이스 Lock의 종류
      • 데이터베이스 정규화
      worldint
      worldint
      공부한 내용들, 트러블 슈팅, 아티클 번역 등등 올리는 블로그입니다

      티스토리툴바