2009-11-25 6 views
2

자동 "테이블 분석"을 예약하는 방법은 무엇입니까? 많은 데이터가 삽입 및 삭제되는 동안 자동 "분석 테이블"을 요청할 수 있습니까? 자동 테이블 분석 프로세스의 매개 변수화, 즉 트리거되어야 할 규칙을 설정하는 방법은 무엇입니까?오라클 튜닝/분석 테이블

답변

2

"트리거되고이 일을 할 수있는 방법이 있나요 당신은 그 실행 할 수 있습니다 통계

BEGIN 
    dbms_stats.gather_table_stats( 
    ownname => <<schema name>>, 
    tabname => <<table name>> 
); 
END; 

를 수집 할 수 있습니다 변경된 데이터 " 이론적으로 DBMS_STATS를 자동으로 설정하는 테이블에서 AFTER INSERT 트리거를 수행 할 수 있습니다.

하지만 원하는 것을 신중히 선택하십시오. 방금 백만 개의 행을 테이블에 삽입 한 대규모 ETL 작업의 중간에 있다면 DBMS_STATS 작업을 자동으로 즉시 자동으로 설정하고 싶지는 않습니다. 똑같이, 당신이 가장 바쁜 온라인 처리 시간 (예 : 점심 시간)에있을 때 동시에 통계를 수집하여 속도를 줄이고 싶지는 않습니다.

일반적으로 이러한 통계는 사용량이 적은 기간 (밤, 주말)에 작업을 수집하려고합니다. 많은 테이블로로드되는 큰 일괄 처리가 있다면 배치에 DBMS_STATS를 빌드합니다.

4

사용중인 Oracle 버전은 무엇입니까? 10.1 일부터 오라클은 매일 밤 통계가 변경된 이후 (변경 될 수있는 내부 알고리즘에 기반하여 임계 값이 15 %라고 생각 됨) 크게 변경된 모든 오브젝트에 대해 통계를 수집하는 자동 작업을 제공합니다 모였다. 현재 지원되는 릴리스를 사용한다고 가정하면, 명시 적으로 해당 작업을 사용 불가능하게하지 않는 한 통계는 기본적으로 자동 수집됩니다.

DBMS_STATS 패키지를 사용하여 이벤트를 기반으로 개체에 대한 통계를 수집하고 DBMS_JOB (또는 DBMS_SCHEDULER) 패키지를 사용하여 비동기 적으로 완료 할 수 있습니다. 상당 부분이있을 때 그래서 ETL 프로세스의 끝에서, 당신은 비동기 적으로

DECLARE 
    l_jobno INTEGER; 
BEGIN 
    dbms_job.submit(
    l_jobno, 
    'BEGIN dbms_stats.gather_table_stats(''<<schema name>>'', ''<<table name>>''); END;', 
    sysdate + interval '1' minute 
); 
END; 
+0

이 분석을 수행하는 작업을 예약하는 방법을 알고 있습니까? 상당한 비율의 데이터가 변경되었을 때, 즉 일정 기반이 아니라 이벤트 기반 일 때이 작업이 실행되도록하는 방법이 있습니까? – paweloque

+0

하나의 테이블을 분석하기 위해 작업을 예약하는 간단한 예제를 포함하도록 답변을 업데이트했습니다. –