Buffers와 TotalCost / cpu_cost / io_cost 의 차이점?
90
작성한 질문수 1
안녕하세요 학습을 완료하고 실 운영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에 관한 차이점을 설명드리겠습니다. 이러한 요소들은 데이터베이스 쿼리 최적화 시 성능에 중요한 역할을 하며, 각각의 의미를 정확히 이해하는 것이 중요합니다.
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 역시 함께 고려해야 합니다. 각 비용 요소는 서로 상관관계가 있어 조정 과정에서 다양한 시나리오와 쿼리를 테스트하며 최적화하는 것이 필요합니다.
관련하여 더 구체적인 정보를 얻고 싶다면 다음 게시물을 참고해 주세요:
- “쿼리 성능 최적화 기초”
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
노션 링크도 안 열리고, 알려준 vercel도 실행이 안됩니다.
0
6
1
astro dev start - python 라이브러리 설치 fail
0
21
1
코드를 첨부해야하는 이유가 있나요?
0
20
2
맥북 환경구성 에러
0
19
2
간단한 오타 제보입니다.
0
19
1
큰 범위 조회 시 EXPLAIN의 rows 값이 정확하지 않은 이유가 궁금합니다.
0
34
2
실제 FK제약조건을 설정하지 않는이유
0
35
2
Free Edition 실습 영상은 아직 업데이트전인가요?
0
22
1
라이브 운영중인 환경의 테이블에 인덱스 추가시 고려사항
0
36
2
상품 정보 크롤링
0
29
2
강의에 적용한 스크립트를 받아 볼수 있을까요?
0
40
2
실습소실행안되요
0
37
1
수강기간 연장
0
27
1
BCNF 질문
0
49
2
연관 엔티티 네이밍 규칙
0
40
1
ORA-01017 오류 때문에 진도가 못나가고있습니다.!
0
38
2
히스토리 관련 질문
0
58
2
SSMS 설치 오류
0
50
1
제공된 홈페이지 로그인 ,출력값, 건의사항 오류
1
47
1
최신 하드웨어에서 SQL Express 설치에러 해결법
0
59
1
맥북용 자료 부탁드립니다.
0
37
2
그 EXISTS의 힌트절에 NESTED LOOP를 쓰는이유 질문
0
76
2
어우 옵티마이저가 뛰어난건지..
0
48
1
안녕하세요 NESTED LOOP 문제에서
0
61
2





