inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Tối ưu hóa SQL áp dụng ngay trong thực tế - 45 kỹ thuật

Ví dụ tuning 3. Kế hoạch thực thi khác mà chỉ các tuner mới biết

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

96

jake

1 câu hỏi đã được viết

0

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

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

sql oracle 데이터-엔지니어링

Câu trả lời 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 역시 함께 고려해야 합니다. 각 비용 요소는 서로 상관관계가 있어 조정 과정에서 다양한 시나리오와 쿼리를 테스트하며 최적화하는 것이 필요합니다.

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

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

실습용 테이블, 데이터 생성 파일 있을까요?

1

12

2

extract 함수 관련 질문

1

12

2

강사님.. 하단 URL에 있었던 코드들 다운 받거나 공유 부탁 드립니다..

0

15

2

백업파일이 안보입니다.

0

18

1

강의 연장 요청

0

21

2

최신버젼 다운로드

0

26

2

IN 사용방법 문의

0

17

1

다음 강의는 언제 올려주시는지요?

0

37

2

하단 파일이 열리지 않습니다

0

35

1

ssh-keygen -t rsa -P "" 등 ssh 암호화? 는 하둡에서 필수인가요?

0

28

2

리뷰를 가장 많이 작성한 회원들 조회

0

29

2

회사 내 AI 툴 사용에 대한 질문

0

29

1

일대일 fk 위치

0

30

1

GROUP BY, HAVING 실습 1번문제

1

31

2

수업에서 사용하는 툴 질문드려요

0

40

2

2강에 파일 어디있을까여,,

0

25

2

다음 강의는 언제쯤 나올까요?

0

50

2

땃지님 실습소 DB서버 확인 부탁드립니다

0

30

2

강의자료 문의

0

21

1

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

0

23

1

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

0

42

2

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

0

82

2

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

0

53

1

안녕하세요 NESTED LOOP 문제에서

0

67

2