홈 › 대용량·배치 › 04 / 8

통계 정보와 힌트

옵티마이저가 계획을 고르는 근거와 강제하는 법
섹션 6진행 0 / 8

통계 정보와 힌트: 옵티마이저가 계획을 고르는 근거와 강제하는 법

같은 쿼리가 어제는 빨랐는데 대량 적재 뒤에 갑자기 느려지는 일이 있습니다. 대부분 원인은 인덱스가 아니라 옵티마이저가 가진 통계가 현실과 달라진 것입니다. 이 레슨은 통계가 무엇이고 어떻게 모으는지, 통계가 틀렸을 때 계획이 어떻게 틀어지는지, 마지막 수단인 힌트를 어떻게 쓰는지 다룹니다.

1. 왜 배우는가

대용량 01 실행 계획에서 예상 행 수와 실제 행 수가 크게 다르면 통계를 의심하라고 했습니다. 이 레슨이 그 통계를 다룹니다. 옵티마이저는 쿼리를 실제로 돌려 보고 계획을 고르지 않습니다. 미리 모아 둔 통계로 조건마다 몇 행이 나올지 계산하고, 그 계산으로 인덱스를 탈지 전체를 읽을지 정합니다.

그래서 통계가 틀리면 계획도 틀립니다. 계획이 틀렸을 때 흔히 하는 해결은 힌트로 계획을 강제하는 것이지만, 힌트는 원인을 고치지 않고 가립니다. 순서는 통계를 먼저 고치고, 그래도 안 될 때만 힌트를 씁니다.

이 레슨은 대용량 01 실행 계획과 대용량 02 조인 방식을 안다고 보고 진행합니다. 예제 데이터는 가상의 주문 5,000행이고 status 값이 심하게 치우쳐 있습니다.

주의

통계 수집 명령, 히스토그램, 힌트의 효과는 H2 로 재현되지 않습니다. 이 레슨에서 DB별 명령은 문법 검토만 했고, 계획 그림은 모두 도식(H2 미지원, 실행 결과 아님)이며 값은 예시입니다. H2 로 실행한 것은 통계가 나타내는 데이터의 분포와, 힌트 주석이 H2 에서 무시된다는 것뿐입니다.