Inflearn Community Q&A
Buffers와 TotalCost / cpu_cost / io_cost 의 차이점?
Written on
·
84
0
안녕하세요 학습을 완료하고 실 운영DB를 바라보고 여러가지 힌트를 사용하면서 테스트 해보고있는데요
DataGrip을 툴로 사용중인데 거기서 Explain plan을 하게되면 TotalCost / cpu_cost / io_cost 라는게 나오는데 버퍼랑 똑같겠거니 하면서 cpu_cost 쪽을 줄여보는 방향으로 튜닝중입니다. 그렇게하면 맞는걸까요??
Quiz
What is the main purpose of SQL indexes?
Data insertion speed improvement
Preventing Table Structure Changes
Data Search Speed Improvement
Save storage space
Answer 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에 관한 차이점을 설명드리겠습니다. 이러한 요소들은 데이터베이스 쿼리 최적화 시 성능에 중요한 역할을 하며, 각각의 의미를 정확히 이해하는 것이 중요합니다.
Buffers: 데이터베이스 내에서 ‘버퍼’는 데이터가 디스크에서 메모리로 로드되어 처리될 때 사용하는 공간을 의미합니다. 높은 버퍼 사용량은 메모리 상에서 직접 데이터 처리를 할 수 있어 디스크 I/O보다 빠르지만, 메모리 사용이 높을 경우 오버헤드가 발생할 수 있습니다.
TotalCost:
- 총 비용(TotalCost)은 주어진 쿼리 실행에 필요한 전반적인 자원 소모의 총합을 나타냅니다. 일반적으로 cpu_cost와 io_cost의 합으로 계산됩니다.
- 총 비용(TotalCost)은 주어진 쿼리 실행에 필요한 전반적인 자원 소모의 총합을 나타냅니다. 일반적으로 cpu_cost와 io_cost의 합으로 계산됩니다.
cpu_cost:
- CPU 비용(cpu_cost)은 쿼리 실행을 위해 CPU가 소모한 자원량을 나타냅니다. 복잡한 계산이 많을수록 이 비용이 증가합니다.
- CPU 비용(cpu_cost)은 쿼리 실행을 위해 CPU가 소모한 자원량을 나타냅니다. 복잡한 계산이 많을수록 이 비용이 증가합니다.
io_cost:
- I/O 비용(io_cost)은 쿼리 실행 동안 디스크에서 데이터를 읽어오는 데 소모되는 자원입니다. 큰 데이터 파일을 많이 읽거나 쓴다면 이 비용이 증가합니다.
- I/O 비용(io_cost)은 쿼리 실행 동안 디스크에서 데이터를 읽어오는 데 소모되는 자원입니다. 큰 데이터 파일을 많이 읽거나 쓴다면 이 비용이 증가합니다.
버퍼와의 관계:
- 버퍼는 메모리에서 데이터를 처리하기 때문에, 버퍼 사용을 잘 최적화하면 io_cost를 낮출 수 있습니다. 이는 데이터가 디스크에서 메모리로 적게 이동하도록 하여 I/O를 줄이는 것입니다.
- cpu_cost는 복잡한 연산을 줄이고, 인덱스를 효율적으로 사용하여 줄일 수 있습니다.
cpu_cost를 줄여나가는 방향은 좋지만, io_cost 역시 함께 고려해야 합니다. 각 비용 요소는 서로 상관관계가 있어 조정 과정에서 다양한 시나리오와 쿼리를 테스트하며 최적화하는 것이 필요합니다.
관련하여 더 구체적인 정보를 얻고 싶다면 다음 게시물을 참고해 주세요:
- “쿼리 성능 최적화 기초”
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





