inflearn logo
강의

Course

Instructor

45 SQL Tuning Techniques You Can Use Right Away in Practice

Tuning Example 3. Another Execution Plan That Only Tuners Know

Buffers와 TotalCost / cpu_cost / io_cost 의 차이점?

101

jake

1 asked

0

안녕하세요 학습을 완료하고 실 운영DB를 바라보고 여러가지 힌트를 사용하면서 테스트 해보고있는데요

DataGrip을 툴로 사용중인데 거기서 Explain plan을 하게되면 TotalCost / cpu_cost / io_cost 라는게 나오는데 버퍼랑 똑같겠거니 하면서 cpu_cost 쪽을 줄여보는 방향으로 튜닝중입니다. 그렇게하면 맞는걸까요??

sql oracle 데이터-엔지니어링

Answer 2

0

codingkorea

네 ~ 질문 정말 감사합니다. 답변드립니다.

cpu_cost를 줄인다고 해서 Buffers가 반드시 줄어드는 것은 아닙니다.

예를 들어, 힌트를 써서 억지로 인덱스를 타게 만들면 계산상 cpu_cost 수치는 낮아질 수 있습니다. 하지만 그 과정에서 오히려 Random I/O가 폭증해 불필요하게 많은 블록을 읽게 된다면, 실제 성능은 더 느려지게 됩니다. 수치상의 비용과 실제 일의 양이 역전되는 경우죠.

그래서 올바른 튜닝의 제1 목표는 항상 Buffers(Logical I/O, Consistent Gets)를 줄이는 것이어야 합니다.

이유는 간단합니다. DB 성능의 핵심은 결국 "얼마나 적은 블록(Block)을 읽어서 원하는 결과를 만들어내느냐"에 달려 있기 때문입니다. Buffers를 줄이는 데 성공하면 물리적인 디스크 I/O(io_cost)와 CPU 사용량(cpu_cost)은 자연스럽게 따라서 줄어듭니다.

Buffers가 실제 발생한 일의 양(원인)이라면, Cost는 그에 따른 예측치(결과)일 뿐이라는 점을 명확히 구분해서 보셔야 합니다.

감사합니다.

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. jake님.

Buffer와 TotalCost, cpu_cost, io_cost에 관한 차이점을 설명드리겠습니다. 이러한 요소들은 데이터베이스 쿼리 최적화 시 성능에 중요한 역할을 하며, 각각의 의미를 정확히 이해하는 것이 중요합니다.

  1. Buffers: 데이터베이스 내에서 ‘버퍼’는 데이터가 디스크에서 메모리로 로드되어 처리될 때 사용하는 공간을 의미합니다. 높은 버퍼 사용량은 메모리 상에서 직접 데이터 처리를 할 수 있어 디스크 I/O보다 빠르지만, 메모리 사용이 높을 경우 오버헤드가 발생할 수 있습니다.

  2. TotalCost:

    • 총 비용(TotalCost)은 주어진 쿼리 실행에 필요한 전반적인 자원 소모의 총합을 나타냅니다. 일반적으로 cpu_cost와 io_cost의 합으로 계산됩니다.
  3. cpu_cost:

    • CPU 비용(cpu_cost)은 쿼리 실행을 위해 CPU가 소모한 자원량을 나타냅니다. 복잡한 계산이 많을수록 이 비용이 증가합니다.
  4. io_cost:

    • I/O 비용(io_cost)은 쿼리 실행 동안 디스크에서 데이터를 읽어오는 데 소모되는 자원입니다. 큰 데이터 파일을 많이 읽거나 쓴다면 이 비용이 증가합니다.

버퍼와의 관계:
- 버퍼는 메모리에서 데이터를 처리하기 때문에, 버퍼 사용을 잘 최적화하면 io_cost를 낮출 수 있습니다. 이는 데이터가 디스크에서 메모리로 적게 이동하도록 하여 I/O를 줄이는 것입니다.
- cpu_cost는 복잡한 연산을 줄이고, 인덱스를 효율적으로 사용하여 줄일 수 있습니다.

cpu_cost를 줄여나가는 방향은 좋지만, io_cost 역시 함께 고려해야 합니다. 각 비용 요소는 서로 상관관계가 있어 조정 과정에서 다양한 시나리오와 쿼리를 테스트하며 최적화하는 것이 필요합니다.

관련하여 더 구체적인 정보를 얻고 싶다면 다음 게시물을 참고해 주세요:
- “쿼리 성능 최적화 기초”

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

77번 문제

0

9

1

76번 문제

1

14

2

64번 문제 관련

0

19

2

airflow 3로 되면서 2.x대에 지원 중단된 패키지가 많네요..ㅠ

0

23

1

dags 디렉토리안에 sql디렉토리 넣고 .sql 파일로 관리해도 되나요?

0

22

2

2,3차 정규화 질문

0

27

2

수강완료 후 문의 드립니다.

1

32

2

실전 모의고사 난이도

0

28

2

Part2 기출 문제 및 해설 자료 파일 없음 형태

0

39

2

21번 마지막 설명에 대해 질문이 있습니다.

0

32

2

노랭이67번

0

27

1

[DB설계] 탈퇴 유저의 구독 정보 유지 및 이메일 마스킹 관련 질문입니다.

0

29

1

자연키 vs 대리키 실무질문

0

19

1

38번 문제 보기 3,4번

1

33

3

14번 문제

1

37

2

결재했는데도 강좌가 안보입니다.

0

35

1

모바일 앱 쿠폰

0

38

1

SQL 기본 문법

0

39

2

1:N 관계에서 중간테이블 (연관엔티티)

0

44

2

GROUP BY 시 인덱스를 타지 않는 이유가 궁금합니다

0

26

1

맥북용 자료 부탁드립니다.

0

47

2

그 EXISTS의 힌트절에 NESTED LOOP를 쓰는이유 질문

0

89

2

어우 옵티마이저가 뛰어난건지..

0

58

1

안녕하세요 NESTED LOOP 문제에서

0

73

2