요약, 번역한 내용. 당연한 내용과 익히 알만한 내용은 제외했다
정리
- 가능하다면 개별의 통계정보를 수집하는 것이 좋다.
- 테이블에 대한 통계정보는 5%가 일반적으로 적당하다.
- 인덱스에 대해선 compute 로 한다.
- histogram은 데이터가 skew되었다고 알려진 컬럼에 대해 추가한다
정리에 대한 설명
- 일반적으로 대부분의 테이블에 대한 통계정보는 5%가 적당하지만 가능하다면 100%로 하는 것이 추천된다.
- 테이블에 대한 통계정보 수집은 정렬을 필요로 하기에 성능과 시간과 연관이 있게 된다.
- 하지만 인덱스의 경우에는 이미 정렬이 되어 있기에 100%로 한다 하더라도 성능은 허용할만 하다.
- 컬럼에 대한 histogram은 일정한 분포도를 벗어나는 컬럼에 대해 적합하다.
자세히
아래 내용은 의견을 모은 것이다(오라클의 공식 가이드는 아니다)
- 다른 시스템의 다른 시스템에는 다른 레벨의 통계정보 수집이 필요하다.
- 통계정보를 수집하는 이유는 CBO가 '좋은' 실행 계획을 세우기 위해 가장 좋은 정보를 제공하는 것이다.
- 정확성은 샘플 사이즈에 의존하게 된다.
- Computed 통계라고 하더라도 CBO가 반드시 Best plan을 선택하는 것은 아니다. 왜냐면 optimizer는 선척적으로 추측하고 사용하는 정보는 제한적이기 때문이다.
- 얼마나 자주 통계 수집을 하는지는 오브젝트가 얼마나 자주 변경되는지에 따라, 또한 통계가 얼마만에 부정확해지는가에 따라 결정된다.
- 좋은 sample size를 정하기 위한 가장 좋은 방법은 다른 샘플 크기로 통계를 수집해 결과를 확인하는 것이다. 낮은 수치부터 진행하다보면 어떤 포인트에서 결과가 일정하게 보이기 시작할 것이다.
- 통계정보는 되도록 사용시간대가 없는 때 하도록 해야 한다. 통계수집중인 오브젝트에 update나 insert 등이 진행중이라면 경합을 겪을 수 있다.
- 통계 수집 주기를 결정하기 위해서는 before 결과값과 after 결과값을 기록해두어 after가 변하는 시점이 적절한 수집 주기일 것이다.
- 만약 before 결과값과 after 결과값이 자주 다를 경우, 데이터 성격이 예측 불가능하거나 데이터의 크기에 비해 샘플 크기가 너무 작거나 데이터가 너무 랜덤할 경우 중 하나일 것이다. 이 경우 통계 수집은 어떤 방법을 써도 한계가 있게 된다. 이 때는 다른 방법으로 쿼리에 대한 실행계획을 세우는 방법을 써야 한다.(힌트라던가?)
- CBO의 기본 cost 계산법을 사용하고 있다면? 새로운 통계를 수집했을 때 몇몇 문장에 대해 다른 실행계획이 세워질 수 있다.
- 이는 데이터 성격이 바뀌었을 경우 CBO가 접근 경로를 바꾸게 되는 정상적인 동작이다.
- 그런데 다른 실행계획이 기존 실행계획보다 나쁠 수도 있다. 차이는 클 수도 있고 작을 수도 있다.
- 약간 다른 기본정보가 CBO에게 주어지면 다른 계획을 선택할 수 있다.
- 대부분의 시스템에서는 예측가능성이 최적의 성능보다 더 중요하다. 위에서 본 불안정한 영향을 미칠 수 있는 통계 수집보다는 분명하다.
- 이 말은 통계 수집을 쓰지 말하는 것은 아니다. 하지만 무슨 일이 일어날지 알아야 한다.
- 통계 정보 수집 후 시스템의 성능에 중요한 영향을 미치는 문장에 대해 허용하는 시간 안에 응답을 하는지 테스트 머신에서 먼저 테스트해봐야 한다
- 중요한 통계정보는 통계정보가 바뀜으로 인해 실행계획이 바뀌어 어플 성능이 떨어졌을 경우를 대비해 이전 통계를 저장하는 것을 권장한다.
- 10g부터는 기본적으로 31일동안은 이전의 통계정보를 저장한다.
- 만약 통계 수집의 결과로 중요한 문장에 대한 성능이 떨어졌다면 이전의 통계로 되돌릴 수 있다.
- 어떤 문장이든지 성능에 영향을 줄 수 있으나 이들을 찾는건 쉽지 않다.
- 하지만 만약 찾았다면. 일반적으로 plan stability 기능 혹은 힌트를 사용하는 것이 안정적인 실행계획을 위해서 가장 좋은 방법이다.
- DW/DSS 환경에서는 쿼리를 예측할 수 없기에 위에서 말한 방법을 사용할 수 없다. 수집된 통계정보에 맡겨야 한다.
'Knowledge > Oracle' 카테고리의 다른 글
About Sequence (0) | 2014.03.07 |
---|---|
User 생성시 quota 관련 주의점 (0) | 2014.01.09 |
Procedure Debug 권한 부여 (0) | 2013.06.26 |
Oracle Standard Edition 으로 RAC 구성시 제약사항 (0) | 2013.05.21 |
Oracle process and Files (0) | 2013.03.18 |