본문 바로가기
Language/SQL 튜닝

2장. [옵티마이저] 2-1. 옵티마이저란?

by RUCKUS 2021. 10. 8.

1. 옵티마이저

뭐 사전적 정의 이런거는 많이들 봤을 테고, 그냥 단순하게 사용자를 대신해서 프로그래밍 해주는 서포터라고 보면 된다. 아이언맨의 자비스, 배트맨의 루시우스 폭스 같은 느낌이랄까?? 여튼 고스트바둑왕의 느낌으로 다가 우리는 SQL을 잘 작성만 해주면 된다.

 

굳이 멋지게 정리하자면, 사용자가 원하는 작업을 가장 효과적으로 실행 할 수 있는 최적의 경로를 선택해서 자동으로 프로시저를 생성해주는 DBMS의 핵심엔진이다.

 

2. 4세대 언어

  • SQL은 구조화된 질의어이다. 그러니까 우리는 육하원칙에 따라 질문하는 것 처럼 논리적인 기획과 설계를 바탕으로 결과 집합을 요구하는 쿼리를 작성한다.
  • 어떤식으로 처리되는지? 그런 프로세스를 직접 기술하지는 않는다.

3. 실행계획과 비용

  • 사용자의 구조화된 질문 (SQL 쿼리)를 전달 받아서 해당 작업에 대한 실행계획들을 찾아낸다.
  • 데이터 딕셔너리에 미리 수집한 오브젝트와 통계정보를 이용해 예상 비용을 산정한다.
  • 비용이 가장 적은 실행계획을 선택한다.
  • 지도에서 길찾기 할때 여러 경로를 표현해주는데 거기서 최소시간이나 최단거리를 보여주는 것이라고 생각하면 된다.
  • 하지만 옵티마이저도 결국 사람이 만든 것, 완벽하다고 볼 수는 없다.
  • 그렇기 때문에 우리는 이러한 실행계획을 DBMS_XPLAN같은 도구를 이용해 미리 파악하고, 쿼리를 직접적으로 튜닝함으로써 최적의 효과를 기대할 수 있다.

4. 비용기반 옵티마이저

  • 말그대로 실행계획에 따른 비용을 기반으로 최적화를 수행하는 옵티마이저다.
  • 비용이란 쿼리를 수행하는데 소요되는 양이나 시간을 말한다.

5. 규칙기반 옵티마이저

  • 미리 정해 놓은 우선순위에 따라 경로를 평가하고 실행계획을 선택하는 옵티마이저다.
  • 중소형 데이터베이스에 적합하고 대용량 데이터에는 다양한 변수를 고려하지 못하기 때문에 부적합 하다.

6. 힌트

  • 특정 실행계획을 선택하게끔 옵티마이저에게 강제하는 작업이다.
  • /*+ 힌트 */ 를 쿼리안에 넣어서 실행한다.
  • SQL의 꽃이라고 ?? 한다.
본 글은 작성자가 공부한 것을 기록하기 위하여 작성한 것으로, 100% 정확한 정보가 아닐 수 있습니다. 정정을 요청하셔도 좋고 여러 의견을 주시면 너무너무 환영이고 감사하겠습니다.