메뉴 건너뛰기

bysql.net

8. 통계정보 Ⅱ

2011.05.04 10:27

AskZZang 조회 수:5913

(1) 전략적인 통계수집 정책의 중요성

 

통계정보 수집이 얼마나 중요한지 깨닫는 것이 매우 중요!!

 

이번 절은 실제 통계정보를 수집하고 관리해야 할 DB 관리자들이 효과적인 통계정보 수집 전략을

세울 수 있도록 돕는 데에 목적이 있다.

 

CBO 능력을 최대한 끌어 올리는 핵심 요소

- 통계정보가 CBO에게 미치는 영향력은 절대적이다.

- 옵티마이저가 그 능력을 최대한 발휘할 수 있도록 환경을 조성해 주어야 한다.

 

DB 관리자의 핵심 역할은 통계정보 관리

- 성능 문제 때문에 수많은 밤을 지샌 원인이 통계정보에 있을 가능성이 있다.

- CBO 환경에서 DBA의 중요한 역할은 통계정보 수집 정책을 세우고 그에 따라 통계정보를

  안정적으로 운영, 관리하는 데에 있다.

- 문제없던 쿼리가 어느 날 갑자기 악성 SQL로 돌변했다면 가정 먼저 해당 테이블 통계정보에

  이상이 없는지 확인해 보라!! => 십중팔구 통계정보에서 비롯된 문제!!

 

통계정보 수집 시 고려사항

- 통계정보를 수집할 때 고려해야 할 중요한 네 가지 요소

  * 시간 : 부하가 없는 시간대에 가능한 빠르게 수집을 완료해야 함.

  * 샘플 크기 : 가능한 적은 양의 데이터를 읽어야 함.

  * 정확성 : 전수 검사할 때의 통계치에 근접해야 함.

  * 안정성 : 데이터에 큰 변화가 없는데 매번 통계치가 바뀌지 않아야 함.

 

  => 가장 짧은 시간 내에 꼭 필요한 만큼만 데이터를 읽어 충분한 신뢰수준을 갖춘 안정적인

     통계정보를 옵티마이저에게 제공!!

 

주기적으로 통계 수집하면서 안정적이어야 최적

- 통계정보의 중요성은 무엇보다 좋은 실행계획을 통해 쿼리 성능을 높이는 데 있다.

- 특히 OLAP처럼 비정형(ad-hoc) 쿼리들이 많은 시스템에선 시스템 성능을 결정짓는 가장

  중요한 변수로 작용한다.

 

통계 수집 정책 수립은 필수

- 통계를 수집할 필요가 없는 오브젝트에 대해서는 Lock 옵션으로 통계정보를 고정.

- 통계정보에 영향을 받아선 안 되는 중요한 일부 핵심 프로그램에 대해선 옵티마이저 힌트를

  적용해 실행계획을 고정시키는 것이 최선이다.

- 운영 DB에서 수집한 통계정보를 개발 DB에도 반영한 상태에서 개발을 진행해야 하며,

  프로그램을 운영 서버에 배포하기 전 충분한 테스트를 거쳐야 한다.

- 시스템 여건과 오브젝트 특성에 맞는 통계수집 정책을 마련하지 않고는 안정적인 고성능

  데이터베이스 구축은 요원한 일이다.

 

(2) DBMS_STATS

- dbms_stats 패키지를 사용하는 것이 바람직하다.

  dbms_stats가 더 정교하게 통계를 계산해 내기 때문이며,

  특히 파티션 테이블/인덱스일 때는 반드시 dbms_stats를 사용해야 한다.

 

 

(3) 컬럼 히스토그램 수집

(4) 데이터 샘플링

(5) 파티션 테이블 통계 수집

(6) 인덱스 통계 수집

(7) 캐싱된 커서 Invalidation

(8) 자동 통계 수집

(9) Statistics Preference