메모리 한도 초과
옵티마이 저는 메모리 압력으로 인해 더 나은 계획 대안을 찾지 않아야했습니다. 그 이유를 조사하고 정정 한 후 쿼리 컴파일을 다시 시도했습니다. 메모리 부족 상태가 존재하지 않았을 때 옵티마이 저가 선택한 계획이 아닐 수도 있습니다.
타임 아웃
이 이유는 많은 오해 입니다.
쿼리 최적화 프로그램은 합리적인 계획을 신속하게 찾는 것을 목표로합니다 . 최상의 계획을 찾기 위해 철저한 검색을 수행하지는 않습니다. 설계 상 필요 이상으로 최적화에 더 많은 시간을 소비하지 않습니다. 이를 보장하기 위해 작동하는 이러한 기능 중 하나는 '시간 초과'(시간 측정 값이 아님)입니다.
옵티마이 저는 논리적 쿼리의 복잡성, 카디널리티 추정치 및 지금까지 찾은 가장 저렴한 계획의 예상 비용 (있는 경우)을 기반으로 '탐색 예산'을 설정합니다. 카디널리티가 높은 복잡한 쿼리에는 더 높은 예산이 제공됩니다.
검색 단계 중 하나에서이 예산을 초과하면 단계가 종료됩니다. 이것은 옵티마이 저의 설계 및 정상 작동의 일부입니다. 더 많은 최적화 노력이 필요한 쿼리가 필요합니다. 그렇지 않은 사람들.
'시간 초과'를 '충분한 계획을 찾았습니다'라고 생각하십시오.
충분한 계획을 찾았습니다
이것은 빈 이유와 정확히 동일합니다. 0.909090 ... (1 / 1.1) 이하의 비용으로 계획을 세우는 것은 단순히 역사적 단점입니다. 이 이유가 나타나면 최적화 프로그램 코드 내에서 조기에 멈추거나 달리 처리하거나 다르게 처리하는 것이 없습니다.
메모리 한계 초과를 제외하고, '초기 종료 이유'는 쿼리 튜닝 또는 성능 분석에 큰 의미를 갖지 않습니다. 나는 일반적으로 그들을 무시합니다.
조언
실제 성능 메트릭 (경과 시간, CPU / 메모리 사용 등 컨텍스트에서 중요한 모든 것)을 기반으로하는 쿼리 튜닝 노력을 목표로합니다. 의도 한 목적에 비해 쿼리 속도가 너무 느리면 더 빨리 만드는 데 시간을 투자하십시오. 실제 성능을 측정하고이를 기준 및 히스토리와 비교하고 중요한 차이에서 튜닝 노력을 목표로합니다.
유용한 통계 및 인덱스, 잘 작성되고 최적화 된 쿼리를 통해 적절한 관계형 스키마에 보장 된 깨끗한 데이터를 저장하십시오.