개발/Database

[Oracle] 실행계획 COST, Cardinality, Bytes 뜻

Hide 2024. 9. 5. 20:14

Cost, Cardinality, Bytes는 쿼리의 성능을 평가하는 데 중요한 정보이다

 

1. Cost

cost는 옵티마이저가 특정 쿼리를 실행하는 데 필요한 비용이다.

비용이란 CPU 시간, I/O 작업량 등을 종합적으로 고려한 추정값이다.

COST는 절대적인 숫자라기보다는 쿼리 실행계획들 간의 상대적인 비교에 활용된다

일반적으로 비용이 낮을 수록 효율적인 쿼리로 간주한다

COST는 실행 시간보다는 자원 소모량을 의미한다

 

2. Cardinality (카디널리티)

카디널리티는 특정 단계에서 옵티마이저가 예상하는 결과 집합의 행(row) 수이다.

특정 조건을 사용하여 데이터를 필터링할 때 얼마나 많은 행이 반환될지를 추정한 값이다.

카디널리티는 옵티마이저가 어떤 인덱스를 사용할지, 어떤 조인 방법을 선택할지를 결정하는데 중요한 역할을 한다.

높은 카디널리티는 많은 행이 반환, 낮은 카디널리티는 적은 행을 반환.

 

3. Bytes

쿼리 실행의 특정 단계에서 처리될 데이터의 예상 크기를 바이트 단위로 나타낸다.

주로 SELECT 문에서 반환되는 데이터의 양을 나타낸다.

쿼리의 i/o 비용을 예측하는데 사용

데이터베이스가 많은 데이터를 읽어야 할 때 바이트가 높아지며 메모리 및 디스크I/O 에 많은 부하가 걸릴 수 있음을 의미한다.

 

  • COST: 쿼리 실행의 상대적인 비용을 나타내며, 주로 자원 소모량을 비교하는 데 사용
  • 카디널리티 (Cardinality): 특정 쿼리 단계에서 예상되는 결과 행의 수를 나타냄
  • BYTES: 처리될 데이터의 예상 크기를 나타내며, I/O 작업의 크기를 예측하는 데 사용

 

1. 카디널리티 (Cardinality)

일반적으로 카디널리티가 적을수록 성능이 좋을 가능성이 높다

카디널리티가 적다는 것은 데이터베이스가 처리해야 할 결과 행의 수가 적다는 것을 의미.

결과적으로, 적은 행을 처리하는 쿼리는 더 적은 리소스를 사용하게 된다.

하지만 카디널리티가 낮아도 그 낮은 결과를 얻기 위해 많은 데이터를 스캔해야 한다면 성능이 좋다고 볼 수 없다.

2. 바이트 (Bytes)

  • 바이트가 낮을수록 쿼리가 처리해야 하는 데이터의 양이 적다는 것을 의미
  • 이로 인해 I/O 작업이 줄어들고, 메모리 사용량도 줄어들기 때문에 성능이 더 좋아질 가능성이 크다.
  •  바이트는 낮지만 쿼리 처리 중 여러 번의 조인이나 정렬이 필요할 경우, 성능이 저하될 수 있다.

3. COST

  • COST는 옵티마이저가 특정 실행 계획을 평가할 때 사용하는 지표이다.
  • 쿼리 성능을 비교하는 데 참고할 수 있는 값.
  • 그러나 COST는 절대적인 값이 아니며, 실제 실행 시간과 꼭 일치하지 않을 수 있다.
  • COST가 낮다고 반드시 성능이 좋은 것은 아니다.
  • 옵티마이저가 추정한 상대적인 비용일 뿐이며, 데이터베이스의 통계 정보나 환경에 따라 다르게 나타날 수 있다.

 

결론

  • 카디널리티가 낮을수록: 성능이 좋아질 가능성이 높다.
  • 바이트가 낮을수록: 데이터 처리량이 적어져 성능이 좋아질 가능성이 크다.
  • COST: 성능에 직접적인 영향을 미치는 절대적인 지표는 아니지만, 실행 계획 간의 성능을 비교할 때 참고할 수 있다.

따라서, 각 지표가 낮다고 성능이 무조건 좋다고 할 수는 없지만, 일반적으로는 카디널리티와 바이트가 낮을수록 성능에 긍정적인 영향을 미치는 경우가 많다.

그러나 실행 계획을 최적화할 때는 이들 지표를 종합적으로 고려해야 한다.