DB&SQL

SQL 튜닝 - 쿼리 비용(cost) 이해하기

초롱불 2024. 5. 28. 12:15

개요

이번 글에서는 쿼리의 비용에 대해 다루어본다. 기본적인 비용 개념은 전반적으로 이해가능한 부분이고 따라서 이전 글들에서도 가볍게 다루었지만 비용이 어떻게 계산되는지 그리고 비용이 무엇을 의미하는지 깊이 있게 다루어보지는 않았다. 이를 이햄함으로써 성능 튜닝을 이해하는 데에도 더욱 도움이 될 수 있을 것이다.

쿼리 비용이란

비용은 옵티마이저가 SQL 문을 실행하기 위해 예상되는 I/O 작업의 수이다. 비용 단위는 단일 블록을 읽는 작업을 의미한다. 예를 들어 실행 계획의 비용이 1,000이라면, 해당 쿼리를 실행하기 위해 1000개의 단일 블록을 읽어야 한다는 의미이다. 하지만 이는 단순한 추정치에 불과하다.

비용 계산 방법

비용은 디스크 I/O, CPU 사용량, 메모리 사용량을 종합하여 계산된다. 비용 계산 공식은 다음과 같다.

  1. 단일블록 I/O 비용: 단일 블록을 읽는 시간과 단일 블록 읽기 횟수를 곱한다.
  2. 다중 블록 I/O 비용: 여러 블록을 동시에 읽는 시간과 다중 블록 읽기 횟수를 곱한다.
  3. CPU 비용: CPU 사이클 수를 CPU 속도로 나눈다.

이 세가지 비용을 더한 후 단일 블록 읽기 시간으로 나누어 총 실행 비용을 구한다.

(Single-block I/O Cost + Multiblock I/O Cost + CPU Cost ) / Single-block read time

디스크 I/O 비용

  • 단일 블록 읽기: 테이블이 블록 단위로 읽힐 때 단일 블록 읽기 시간이 사용된다.
  • 다중 블록 읽기: 전체 테이블을 읽거나 테이블의 범위를 읽을 때 여러 블록을 동시에 읽어 속도를 높인다.

CPU 비용

CPU 비용은 쿼리 실행 중 예상되는 CPU 사이클 수를 CPU 속도로 나누어 계산한다. CPU 비용은 정렬 해싱 캐싱 등 다양한 작업에서 발생할 수 있다.

메모리 사용량

메모리 사용량은 직접적인 I/O 비용 계산에 포함되지 않지만 메모리 버퍼 캐시 등의 방법으로 디스크 I/O 대신 메모리 접근이 발생하여 I/O 비용을 줄이는 등의 역할을 한다.

 

결론

이번 글에서는 쿼리 비용이 무엇인지 어떻게 계산되는지 다루어보았다. 비용은 옵티마이저가 최적의 실행 계획을 결정하는 데 중요한 역할을 하며 최신 통계 데이터를 기반으로 추정된다. 따라서 정확한 비용 계산과 더 나은 실행 계획을 위해 최신 통계가 중요하다. 비용 계산이 추정치라는 점을 항상 염두에 두고 이를 바탕으로 옵티마이저가 최적의 실행 계획을 선택할 수 있도록 돕는 것이 우리의 역할이다.

감상

비용에 대해서 더 자세히 알려주는 강의였으나 와닿지는 않는 내용들이었다. 계산 방식을 외워야 하는 걸까 고민이 드는 부분이다. 디스크에서 읽는 I/O의 수치를 계산해서 적당히 만든다는 정도로 이해하고 싶기도 하다. 그러나 전문가가 되기로 마음 먹은 이상 어설프게 알 바에는 깊이 아는 게 좋을 거라고도 생각을 한다. 무작정 완전 암기를 목표로 한다기보다도 누군가 물어온다면 설명할 수 있는 사람이 되고 싶다.

'DB&SQL' 카테고리의 다른 글

SQL 튜닝 - Row Source Generator  (0) 2024.05.31
SQL 튜닝 - 실행 계획 생성기  (0) 2024.05.29
SQL 튜닝 - 선택성과 카디널리티  (0) 2024.05.27
SQL 튜닝 - Query Transformer  (0) 2024.05.26
SQL 튜닝 - 옵티마이저의 필요성  (0) 2024.05.25