강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

jake님의 프로필 이미지
jake

작성한 질문수

실무에서 바로 쓰는 SQL튜닝 45가지

튜닝예제3. 튜너들만 아는 또 다른 실행계획

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

작성

·

14

0

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

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

답변 2

0

코딩 대한민국님의 프로필 이미지
코딩 대한민국
지식공유자

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

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

안녕하세요, 인프런 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 역시 함께 고려해야 합니다. 각 비용 요소는 서로 상관관계가 있어 조정 과정에서 다양한 시나리오와 쿼리를 테스트하며 최적화하는 것이 필요합니다.

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

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

jake님의 프로필 이미지
jake

작성한 질문수

질문하기