Database/친절한 SQL 튜닝

[친절한 SQL 튜닝 스터디] 1장. SQL 처리 과정과 I/O - 실행계획

쿠카이든 2024. 3. 26. 21:51
728x90
  • 구조적, 집합적, 선언적 질의 언어
    • SQL은 원하는 결과집합을 구조적, 집합적으로 선언하지만, 그 결과집합을 만드는 과정은 절차적일 수밖에 없다.
      • 즉, 프로시저가 필요한데, 그런 프로시저를 만들어 내는 DBMS 내부 엔진이 바로 SQL 옵티마이저다. 
        • 옵티마이저가 프로그래밍을 대신해 주는 셈이다.
      • DBMS 내부에서 프로시저를 작성하고 컴파일해서 실행 가능한 상태로 만드는 전과정을 'SQL 최적화' 라고 한다.
  • SQL 최적화
    • SQL 파싱 - 사용자로부터 SQL을 전달받으면 가장 먼저 SQL 파서(Parser)가 파싱을 진행한다. SQL 파싱을 요약하면 아래와 같다.
      • 파싱 트리 생성 : SQL 문을 이루는 개별 구성요소를 분석해서 파싱 트리 생성
      • Syntax 체크 : 문법적 오류가 없는지 확인. 예를 들어, 사용할 수 없는 키워드를 사용했거나 순서가 바르지 않거나 누락된 키워드가 있는지 확인
      • Semantic 체크 : 의미상 오류가 없는지 확인. 예를 들어, 존재하지 않는 테이블 또는 컬럼을 사용했는지, 사용한 오브젝트에 대한 권한이 있는지 확인
    • SQL 최적화
      • 다음 단계가 SQL 최적화이고, 옵티마이저(Optimizer)가 그 역할을 맡는다.
      • SQL 옵티마이저는 미리 수집한 시스템 및 오브젝트 통계정보를 바탕으로 다양한 실행경로를 생성해서 비교한 후 가장 효율적인 하나를 선택한다. 
      • 데이터베이스 성능을 결정하는 가장 핵심적인 엔진이다.
    • 로우 소스 생성
      • SQL 옵티마이저가 선택한 실행경로를 실제 실행 가능한 코드 또는 프로시저 형태로 포맷팅하는 단계. 로우 소스 생성기(Row-Source Generator)가 그 역할을 맡는다.
728x90
  • SQL 옵티마이저 - SQL 옵티마이저는 사용자가 원하는 작업을 가장 효율적으로 수행할 수 있는 최적의 데이터 엑세스 경로를 선택해 주는 DBMS의 핵심 엔진이다. 옵티마이저의 최적화 단계를 요약하면 아래와 같다.
    • 사용자로부터 전달받은 쿼리를 수행하는 데 후보군이 될만한 실행계획들을 찾아낸다.
    • 데이터 딕셔너리(Data Dictionary)에 미리 수집해 둔 오브젝트 통계 및 시스템 통계정보를 이용해 각 실행계획의 예상비용을 산정한다.
    • 최저 비용을 나타내는 실행계획을 선택한다
  • 실행계획과 비용
    • 실행계획 - DBMS의 'SQL 실행경로 미리보기' 기능
    • SQL 옵티마이저가 생성한 처리절차를 사용자가 확인할 수 있게 아래와 같이 트리 구조로 표현한 것이 실행계획이다. 
    • SQL 실행계획에 표시되는 Cost도 어디까지나 예상치이다. 실행경로를 선택하기 위해 옵티마이저가 여러 통계 정보를 활용해서 계산해 낸 값이다. 실측치가 아니므로 실제 실행할 때 발생하는 I/O 또는 시간과 많은 차이가 난다. 

출처: 한국데이터산업진흥원(https://dataonair.or.kr/db-tech-reference/d-guide/sql/?mod=document&uid=354)

 

 

참고 : 친절한 SQL 튜닝 (저자: 조시형)

728x90