code

Oracle - 인덱스를 만들거나 열을 추가한 후 통계를 계산해야 합니까?

starcafe 2023. 10. 15. 17:31
반응형

Oracle - 인덱스를 만들거나 열을 추가한 후 통계를 계산해야 합니까?

프로덕션에서 Oracle 10.2.0.5 데이터베이스를 사용합니다.

Optimizer는 "비용 기반" 모드입니다.

다음을 수행한 후 통계(DBMS_STATS 패키지)를 계산해야 합니까?

  • 새 인덱스 생성
  • 열 추가
  • 새 테이블 만들기

?

감사해요.

짧은 대답은 없습니다.데이터와 사용 방법에 따라 완전히 달라집니다. 당신이 어떻게 사용하느냐에 달려있습니다.고려해야 할 사항은 다음과 같습니다.

@NullUserException이 지적한 바와 같이 통계는 대개 매일 밤 자동으로 수집됩니다.보통은 이 정도면 충분합니다. 대부분의 OLTP 환경에서는 새 개체만 추가해도 통계가 자동으로 수집되기 전에는 많은 데이터가 포함되지 않습니다.그 계획은 그렇게 나쁘지 않을 것이고, 만약 그 물건들이 새것이라면 아마도 그것들은 당장 많이 사용되지 않을 것입니다.

  • 새 인덱스 만들기 - 아니요. "Oracle Database는 이제 인덱스를 만들고 재구성하는 동안 자동으로 통계를 수집합니다."
  • 열 추가 - 아마도.조인 및 술어에서 열을 사용할 경우 이 열에 대한 통계를 원할 수 있습니다.데이터를 저장하고 표시하는 데만 사용된다면 계획에 실제로 영향을 미치지 않습니다.그러나 새 열이 공간을 많이 차지하는 경우 평균 행 길이, 블록 수, 행 체인 등이 크게 변경될 수 있으므로 최적화자는 이에 대해 알아야 합니다.
  • 새 테이블 만들기 - 아마도.Oracle은 동적 샘플링을 통해 누락된 통계를 보완할 수 있지만, 이는 종종 충분하지 않습니다.특히 새 테이블에 많은 데이터가 있는 경우, 잘못된 통계는 거의 항상 카디널리티를 과소 추정하게 하고, 이로 인해 해시 조인을 원할 때 중첩 루프가 발생합니다.또한 테이블 데이터가 변경되지 않았더라도 히스토그램을 활성화하려면 통계를 한 번 더 수집해야 할 수도 있습니다.기본적으로 Oracle은 비대칭 데이터에 대한 히스토그램을 생성하지만 해당 열이 술어로 사용되지 않은 경우에는 해당 히스토그램을 활성화하지 않습니다.(따라서 새 열을 추가하는 경우에도 적용됩니다.)같은 이름이라도 테이블을 삭제하고 다시 만들면 Oracle은 해당 열 사용 데이터를 유지하지 않으며 특정 열에 히스토그램이 필요한지 알 수 없습니다.

옵티마이저 통계를 수집하는 것은 대부분의 사람들이 알고 있는 것보다 훨씬 더 어렵습니다.현재 직장에서는 대부분의 실적 문제가 결국 나쁜 통계 때문입니다.시스템에 대한 계획을 세우려면 Managing Optimizer Statistics(최적화 통계 관리) 을 읽어봐야 합니다.


업데이트:

빈 개체에 대한 통계를 수집할 필요가 없습니다. 동적 샘플링은 데이터 사전에서 통계를 읽는 것만큼 빠르게 작동합니다. (통계가 있는 쿼리와 없는 쿼리의 수가 많은 빠른 테스트 하드 파싱을 기반으로 합니다.)동적 샘플링을 비활성화하면 Oracle 기본값으로 인해 계획이 부정확해지는 이상한 경우가 발생할 수 있으므로 빈 테이블에 통계를 표시하는 것이 좋습니다.

Oracle이 생성 시 인덱스에 대한 통계를 자동으로 수집하는 이유는 추가 비용이 많이 들지 않기 때문이라고 생각합니다.인덱스를 생성할 때 테이블의 모든 블록을 읽어야 하므로 Oracle이 레벨, 블록, 키 등의 수를 동시에 계산할 수도 있습니다.

테이블 통계는 더 복잡할 수 있으며 데이터를 여러 번 전달해야 할 수도 있습니다.인덱스를 만드는 것은 선택한 대로 만들기 테이블의 일부로 사용될 수 있는 임의 SQL에 비해 상대적으로 간단합니다.이러한 임의 SQL 문을 가져다가 통계 수집에 필요한 정보를 반환하는 쿼리로 변환하는 것은 불가능하거나 효율적이지 않을 수 있습니다.

물론 빈 테이블에 대한 통계를 수집하는 데 추가 비용이 들지 않습니다.그러나 그것은 당신에게 아무것도 가져다 주지 않으며, 단지 USER를 보는 사람에게 오해를 불러일으킬 뿐입니다.테이블.LAST_ANALYASED - 테이블이 분석된 것처럼 보이지만 의미 있는 데이터는 없습니다.

언급URL : https://stackoverflow.com/questions/7289319/oracle-do-you-need-to-calculate-statistics-after-creating-index-or-adding-colu

반응형