2010-04-21 4 views
2

내 개발 데이터베이스와 프로덕션 데이터베이스를 비교하고 있습니다.Oracle : 데이터베이스 간의 실행 계획 차이점

이들은 모두 Oracle 9i이지만 거의 모든 단일 쿼리는 데이터베이스에 따라 완전히 다른 실행 계획을 가지고 있습니다.

모든 테이블/색인은 동일하지만 dev 데이터베이스는 각 테이블에 대해 약 1/10의 행을 갖습니다.

생산 단계에서 대부분의 쿼리에 대해 선택한 쿼리 실행 계획은 개발과 다르며 비용은 1000 배 이상 높습니다. 프로덕션에 대한 쿼리는 경우에 따라 쿼리에 대해 올바른 인덱스를 사용하지 않는 것처럼 보입니다 (전체 테이블 액세스).

저는 CBO가 무언가 알아낼 수 있기를 희망하여 최근에 두 데이터베이스 모두에서 dbms_utility.analyze 스키마를 실행했습니다.

다른 원인이 될 수있는 오라클 구성이 있습니까? 데이터베이스 매개 변수 생산성 및 데브에 걸쳐 해당하는 경우

나는 ..

+0

통계를 업데이트 했습니까? UPDATE STATISTICS schema.table WITH FULLSCAN; – mevdiven

+1

@mevdiven - 죄송합니다. 오라클 구문이 아닙니다. @Will - Oracle DBMS_STATS 패키지를 읽고 사용하고 싶습니다. – dpbradley

+0

오른쪽입니다. 그것은 오라클이 아닙니다. 오라클은 ANALYZE TABLE입니다. 시정 해줘서 고마워. – mevdiven

답변

4

1) 개발자가 주로 그래서 DBA의 이러한 종류의 분석은 처음에는 상당히 혼란 나는 내가 확인 할 첫 번째 일이다. 비용 기반 최적화 도구의 결정에 영향을주는 매개 변수 중 하나가 다른 경우 모든 베팅이 해제됩니다. v $ parameter view에서 매개 변수를 볼 수 있습니다.

2) 개체 통계를 최신으로 유지하는 것이 좋습니다. 그러나 개발자가 지적한 큰 차이점을 명심하십시오. Dev에는 Prod 행의 10 %가 있습니다. 이 행 개수는 CBO가 쿼리를 실행하는 최선의 방법을 결정하는 방법에 포함됩니다. 행 수의 큰 차이를 감안할 때 계획이 동일 할 것으로 기대하지는 않습니다.

상황에 따라 최적화 프로그램은 200,000 행 (Prod)의 테이블에서 인덱스가 더 저렴한 비용을 결정할 수있는 20,000 개의 행 (Dev)이있는 테이블을 전체 테이블 스캔으로 선택할 수 있습니다. (데모 용 숫자, CBO는 FTS의 대상과 절대 값이 아닌 인덱스 스캔을 결정하기 위해 원가 계산 알고리즘을 사용합니다.

3) 시스템 통계는 또한 설명 계획에 영향을줍니다. 이것은 CPU 및 디스크 I/O 특성을 나타내는 일련의 통계입니다. 두 시스템의 하드웨어가 다른 경우 시스템 통계가 다를 것으로 예상되어 계획에 영향을 미칠 수 있습니다. Jonathan Lewis의 좋은 토론 here sys.aux_stats $보기를 통해 시스템 통계를 볼 수 있습니다.

다른 계획이 당신에게 나쁜 이유는 확실하지 않습니다 ... 통계가 최신이고 매개 변수가 올바르게 설정되면 크기 차이에 관계없이 어느 시스템에서나 훌륭한 성능을 얻어야합니다.

하지만 Prod 시스템에서 통계를 내보내고이를 Dev 시스템에로드 할 수 있습니다. 이렇게하면 Prod 통계를 Dev 데이터베이스에서 사용할 수 있습니다.

DBMS_STATS 패키지에 대한 Oracle 설명서, 특히 EXPORT_SCHEMA_STATS, EXPORT_SYSTEM_STATS, IMPORT_SCHEMA_STATS, IMPORT_SYSTEM_STATS 프로 시저를 확인하십시오. 10g/11g의 오후 10시 야간 통계 작업을 비활성화해야 할 수도 있습니다. 또는 야간 작업으로 업데이트되지 않도록 가져 오기 후 통계 잠그기를 조사 할 수 있습니다.