inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

김영한의 실전 데이터베이스 - 성능 최적화, 실행 계획과 인덱스 완전 정복

정리

통계정보 갱신 질문

62

backendman

작성한 질문수 28

0

안녕하세요~

 

강의 수강중 통계정보 갱신에 대해 여쭤보고싶은게 있습니다.

 

운영중에 간혹가다 옵티마이저가 실행계획을 잘못 선택해서 쿼리를 실행해서 슬로우 쿼리가 발생되는 경우가 종종있었습니다. 이때 use index 를 사용해서 주로 해결했었는데 이번 강의에서는 문제가 되는 테이블의 통계정보를 갱신하면 이런 문제들이 해결된다고 하시던데

운영중인 db 에 통계정보 갱신을 했을때 트레이드 오프같은게 없을까요? 실무에서 보통 어떻게 하셨는지 궁금하네요.

sql mysql dbms/rdbms sql-tuning SQLD

답변 2

0

김영한

안녕하세요. backendman님

결론부터 말하면 MySQL 8.0.24 기준으로 트레이드오프는 거의 없습니다.

InnoDB의 ANALYZE TABLE은 테이블 전체를 스캔하는 게 아니라 인덱스별로 일부 페이지만 샘플링합니다(기본 20페이지). 그래서 수억 건 테이블도 보통 수 초 안에 끝나고 부하도 미미합니다.

실무에서는 문제가 반복되는 테이블에 새벽 배치로 ANALYZE TABLE을 정기 실행하는 게 흔한 패턴입니다. 자동 재계산이 "행의 10% 변경" 시점에만 동작해서 대용량 테이블은 통계가 낡기 쉽기 때문입니다.

USE INDEX는 즉효약이지만 플랜을 고정시켜서 데이터 분포가 바뀌어도 옛 플랜을 강제하는 유지보수 리스크가 있습니다. 통계 갱신으로 옵티마이저가 스스로 올바른 판단을 하게 만드는 게 근본 해결이고, 힌트는 그래도 안 되는 특수 케이스에만 남기는 걸 권장합니다.

감사합니다.

0

인프런 AI 인턴

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

운영 중인 데이터베이스에서 통계 정보를 갱신하는 것은 쿼리 최적화 측면에서 중요한 작업입니다. 옵티마이저가 잘못된 실행 계획을 선택하는 경우, 이는 종종 오래되거나 부정확한 통계 정보에 기인합니다. 통계 정보 갱신은 이러한 오류를 줄이고 쿼리 성능을 개선할 수 있는 방법 중 하나입니다.

통계정보 갱신의 트레이드오프 및 고려사항

  1. 성능 부하: 통계 정보를 갱신하는 과정 자체가 리소스를 필요로 하며, 특히 대용량 테이블에서는 상당한 시간이 소요될 수 있습니다. 따라서 데이터베이스 부하가 적은 시간에 수행하는 것이 좋습니다.

  2. 잠금(Lock) 우려: 통계 갱신 과정에서 테이블이나 인덱스에 대한 잠금이 발생할 수 있어 다른 작업에 영향을 미칠 수 있습니다.

  3. 빈도 조절: 너무 자주 갱신하면 부하가 발생할 수 있으며, 너무 드물게 갱신하면 쿼리 최적화에 도움이 되지 않습니다. 주기적인 분석과 적정 빈도를 설정하는 전략이 필요합니다.

실무에서의 활용

  • 자동화 설정: 많은 경우, 데이터베이스 관리자들은 통계 정보의 자동 갱신을 설정하며, 시스템 부하가 적은 시간대에 작업이 이루어지도록 합니다.
  • 쿼리 성능 모니터링: 통계 갱신 후 쿼리 성능을 모니터링하여, 실제 성능 개선 여부 및 추가 조치 필요성을 확인합니다.

관련된 구체적인 사례나 추가 정보를 원하시면, 다음과 같은 기존 질문/답변을 확인해 보시길 추천드립니다:

  1. “DB 통계정보 갱신이 왜 중요한가요?” - 통계 정보와 실행 계획 간의 상관관계에 대한 심층적인 논의가 포함되어 있습니다.

  2. “MySQL 옵티마이저와 통계 갱신” - MySQL 옵티마이저의 특성과 통계 정보 갱신의 중요성에 대해 설명합니다.

이러한 자료들을 참고하여 실무에서의 활용 방안을 더 명확히 이해하실 수 있을 것입니다.

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

실습소 페이지

0

11

1

노드

0

11

1

57번

0

18

1

안녕하세요. 요약집 어디서 볼 수 있을까요?

0

21

1

아무도 모르게 책 내시면 모르실 줄 알고!!

1

33

2

Jib 이미지 빌드에서 docker credential 관련으로 이슈가 있다면

1

47

1

스크립트에 대해 질문 있습니다.

1

39

1

64비트 다운로드 링크

0

23

2

같은 사용자가 연속된 중복 호출할 경우 어떻게 되는지 궁금합니다!

2

33

1

리뷰

0

30

2

조건 검색 질문

0

31

1

3번 문제 질문!

0

34

2

41번과 43번 문제

0

36

1

upload_file_id가 1,3,4 순서인 건에 대해

0

31

1

샘플데이터 요청

1

32

2

p.created_at vs u.name 인덱스 문의

0

39

2

콘솔 로그가 깨져나오는데 혹시 방법이 있을까요?

0

43

2

이진 트리 노드

0

42

1

PK 관련하여 궁금한 점이 있어서 질문 드립니다.

0

66

2

탐색을 한번 더 하지 않게 하는 방식 중 어댑티브 해시 방식도 맞는지 궁금 합니다.

0

70

2

컬럼 크기가 대용량인 경우 DB 버퍼 풀에 전부 올라오는지 궁금합니다

0

61

2

실습데이터 ORDERS 생성 시간 질문요...

0

92

3

MySQL 서버구조 쿼리파서 질문 있습니다 !

0

67

1

Postgresql 아키텍처 업데이트

1

84

2