it-swarm-ko.tech

Oracle 데이터베이스 통계는 얼마나 자주 실행해야합니까?

경험상 Oracle 데이터베이스 통계를 얼마나 자주 실행해야합니까? 우리 개발자 팀은 최근 통계가 2 1/2 개월 이상 우리의 프로덕션 박스에서 실행되지 않았다는 것을 발견했습니다. 그것은 나에게 오랜 시간처럼 들리지만 나는 DBA가 아닙니다.

21
user290

마지막 직장에서 일주일에 한 번 통계를 실행했습니다. 올바르게 기억한다면 목요일 밤에 예약했고 금요일에 DBA는 가장 오래 실행되는 쿼리를 예기치 않게 모니터링하는 데 매우 신중했습니다. (코드 릴리스 직후 인 금요일이 많았고 트래픽이 적은 날이 많았습니다.) 잘못된 쿼리를 보았을 때 더 나은 쿼리 계획을 찾아 저장하면 예기치 않게 다시 변경되지 않습니다. . (Oracle에는 자동으로이를 수행 할 수있는 도구가 있으며이를 최적화하도록 쿼리에 지시합니다.)

많은 조직에서는 잘못된 쿼리 계획이 예기치 않게 나타나는 것을 두려워하여 통계를 실행하지 않습니다. 그러나 이것은 일반적으로 쿼리 계획이 시간이 지남에 따라 악화되고 악화됨을 의미합니다. 통계를 실행할 때 많은 문제가 발생합니다. 이러한 문제를 해결하기위한 스크램블 결과는 통계 실행의 위험에 대한 두려움을 확인시켜줍니다. 그러나 통계를 정기적으로 실행하고 예상대로 모니터링 도구를 사용하고 문제가 발생하면 문제를 해결하면 두통이 줄어들고 한 번에 모든 문제가 발생하지 않습니다.

13
user11318

Oracle 11g 통계는 기본적으로 자동 수집되므로.

Oracle Database 설치시 두 개의 스케줄러 창이 사전 정의됩니다.

  • WEEKNIGHT_WINDOW는 오후 10시에 시작합니다. 월요일부터 금요일까지 오전 6시에 종료됩니다.
  • WEEKEND_WINDOW는 하루 종일 토요일과 일요일을 다룹니다.

통계가 마지막으로 수집 된시기

SELECT owner, table_name, last_analyzed FROM all_tables ORDER BY last_analyzed DESC NULLS LAST; --Tables.
SELECT owner, index_name, last_analyzed FROM all_indexes ORDER BY last_analyzed DESC NULLS LAST; -- Indexes.

자동화 된 통계 수집 상태?

SELECT * FROM dba_autotask_client WHERE client_name = 'auto optimizer stats collection';

Windows 그룹?

SELECT window_group_name, window_name FROM dba_scheduler_wingroup_members;

창 일정?

SELECT window_name, start_time, duration FROM dba_autotask_schedule;

이 스키마에서 데이터베이스 통계를 수동으로 수집하십시오.

EXEC dbms_stats.gather_schema_stats(ownname=>NULL, cascade=>TRUE); -- cascade=>TRUE means include Table Indexes too.

모든 스키마에서 데이터베이스 통계를 수동으로 수집하십시오!

-- Probably need to CONNECT / AS SYSDBA
EXEC dbms_stats.gather_database_stats;
14
grokster

데이터가 "상당히"변경 될 때마다.

테이블이 1 행에서 200 행으로 바뀌면 큰 변화입니다. 테이블이 10 만 행에서 150,000 행으로 바뀌더라도 크게 변하지는 않습니다. 일반적으로 쿼리되는 열 X에서 동일한 값을 가진 1000 개의 행에서 열 X에서 거의 고유 한 값을 가진 1000 개의 행으로 갈 때 중요한 변화입니다.

통계는 항목 수 및 상대 빈도에 대한 정보를 제공합니다. 즉, 주어진 기준과 일치하는 행 수를 "추측"할 수 있습니다. 잘못 추측되면 옵티마이 저는 very 차선의 쿼리 계획을 선택할 수 있습니다.

13
Jonathan Rupp

어떤 Oracle 버전을 사용하고 있습니까? Oracle 10을 참조하는이 페이지를 확인하십시오.

http://www.acs.ilstu.edu/docs/Oracle/server.101/b10752/stats.htm

그것은 말한다 :

통계 수집에 권장되는 방법은 Oracle이 자동으로 통계를 수집하도록하는 것입니다. Oracle은 모든 데이터베이스 개체에 대한 통계를 자동으로 수집하고 정기적으로 예약 된 유지 관리 작업에서 이러한 통계를 유지 관리합니다.

5
David Medinets

10g 이상의 Oracle 버전에서는 옵티마이 저가 "좋은"실행 계획 결정을 내리기 위해 테이블과 인덱스에 대한 최신 통계가 필요합니다. 통계 수집 빈도는 까다 롭습니다. 응용 프로그램, 스키마, 데이터 속도 및 비즈니스 관행에 따라 다릅니다. 이전 버전의 Oracle과 호환되도록 작성된 일부 타사 앱은 새 옵티 마이저에서 제대로 작동하지 않습니다. 해당 응용 프로그램에서는 테이블에 통계가 없어서 db가 룰베이스 실행 계획으로 되돌아갑니다. 그러나 평균적으로 오라클은 오래된 통계가있는 테이블에서 통계를 수집 할 것을 권장합니다. 테이블을 모니터하도록 설정하고 상태를 점검하고 부실 여부를 분석하도록 할 수 있습니다. 종종 충분하지만 때로는 그렇지 않습니다. 실제로 데이터베이스에 따라 다릅니다. 내 데이터베이스의 경우 성능을 유지하기 위해 야간 통계 수집이 필요한 OLTP 테이블 세트가 있습니다. 다른 테이블은 일주일에 한 번 분석됩니다. 큰 dw 데이터베이스에서는 테이블이 필요하므로 분석합니다. 전체 DB로드 및 성능에 영향을주지 않으면 서 정기적 인 분석을하기에는 너무 커서 정답은 애플리케이션, 데이터 변경 및 비즈니스 요구에 따라 다릅니다.

2
MichaelN

Oracle이 지원하는 대규모 다중 사용자 계획 시스템을 관리 할 때 DBA는 매주 통계를 수집하는 작업을 수행했습니다. 또한 통계에 영향을 미치거나 영향을받을 수있는 중요한 변경 사항을 롤아웃 할 때 작업이 중단되도록 작업을 강제 종료합니다.

2
Joe Skora

최신 통계로 인해 쿼리 계획이 바람직하지 않게 변경되는 위험과 오래된 통계로 인해 쿼리 계획이 변경 될 수있는 위험의 균형을 유지하십시오.

ISSUE 테이블과 CREATE_DATE 열이있는 버그 데이터베이스가 있고 열의 값이 다소 단조 증가한다고 가정합니다. 이제이 열에 2008 년 1 월 1 일과 2008 년 9 월 17 일 사이에이 열의 값이 균일하게 분포되어 있음을 알리는 히스토그램이 있다고 가정하면 옵티마이 저가 행 수를 합리적으로 추정 할 수 있습니다. 지난 주에 작성된 모든 문제 (예 : 9 월 7 일-13 일)를 찾으려면 반환됩니다. 그러나 응용 프로그램이 계속 사용되고 통계가 업데이트되지 않으면이 히스토그램의 정확성이 떨어집니다. 따라서 옵티마이 저는 "지난 주에 생성 된 문제"에 대한 쿼리가 시간이 지남에 따라 점점 정확하지 않을 것으로 예상하고 결과적으로 Oracle이 쿼리 계획을 부정적으로 변경할 수 있습니다.

1
Justin Cave

대량 삽입 또는 큰 데이터 변경이 데이터베이스에서 자주 발생하는 등의 정당성이 없으면 일반적으로 전체 데이터베이스에서 통계를 너무 자주 수집하지 않는 것이 좋습니다. 이 빈도로 데이터베이스에 대한 통계 수집은 쿼리 실행 계획을 새로운 불량 실행 계획으로 변경할 수 있습니다. 새로운 불량 계획의 영향을받는 모든 쿼리를 조정하는 데 많은 시간이 소요될 수 있습니다. 이것이 수집의 영향을 테스트해야하는 이유입니다 테스트 데이터베이스에 대한 새로운 통계, 또는 시간이나 인력이 부족한 경우 최소한 새로운 통계를 수집하기 전에 원래 정적을 백업하여 대체 계획을 유지해야합니다. 새 통계와 쿼리가 예상대로 수행되지 않으면 원래 통계를 쉽게 복원 할 수 있습니다.

원본 통계를 백업하고 새로운 통계를 수집하는 데 도움이되는 유용한 스크립트가 있으며, 새로운 통계를 수집 한 후 예상대로 진행되지 않은 경우 원래 정적을 복원하는 데 사용할 수있는 SQL 명령을 제공합니다. 이 링크에서 스크립트를 찾을 수 있습니다 : http://dba-tips.blogspot.com/2014/09/script-to-ease-gathering-statistics-on.html

0
Chion

데이터웨어 하우스 유형 시스템의 경우 통계를 전혀 수집하지 않고 동적 샘플링을 사용하는 것을 고려할 수 있습니다 (optimizer_dynamic_sampling을 레벨 2 이상으로 설정).

0
David Aldridge