본문 바로가기

# Development/Database

[ORACLE] 오라클 분석(Oracle Analyze), 통계정보, 실행계획 (Execution Plan) : Part1-용어이해

 

오라클 분석(Oracle Analyze), 통계정보, 실행계획 (Execution Plan) : Part1-용어이해

 

어느날 보통 10분이면 끝나던 프로시저가 말도 안되게 시간이 오래걸렸다.
뭔가 오라클 실행계획이 변경된 듯했다. 
통계정보를 업데이트하고, HINT를 사용하니 배치가 5분만에 완료되었다.
 
이참에 오라클 통계정보가 무엇인지,  통계정보가 어떻게 오라클 실행계획에 영향을 미치는지 알아보자.
 

오라클에서 분석과 비용이란?

오라클에서 '분석'이란, SQL문을 분석하고 어떤 테이블이나 컬럼 등으로 구성되어 있는지 조사하고, 이를 알고리즘에 따라 처리하는 것을 말한다. 오라클은 '비용 기반(cost base)' 알고리즘을 가지고 있다. 여기서 '비용'이란 처리에 필요하다고 생각되는 시간 또는 자원활용량이다. 비용 기반 알고리즘은 처리시간과 I/O 횟수를 최적으로 처리하는 방법을 말한다. 이를 기반으로 오라클은 실행계획(Excecution Plan)을 세운다.

 

통계 정보

오라클에서 '비용 (가장 효율적인 실행계획)'은 통계정보라고 불리는 기초 수치를 기반으로 계산하고 있다.
통계 정보는 아래의 데이터들을 포함한다.
 

테이블이나 인덱스의 통계 정보

- 데이터 양
- 최댓값, 최솟값
- 데이터의 분포 등
 

파라미터 정보

- 정렬(sort) 메모리의 크기
- 풀 스캔시 I/O 한 번에 읽어들이는 블록의 개수 등
 

시스템 통계 정보

- CPU의 클럭
- 지금 환경의 I/O 성능 등
 

통계 수집 (dbms_stats)

통계 정보는 '통계 수집(dbms_stats)'이라고 불리는 작업을 통해 얻을 수 있다.
 

🔮 DBMS_STATS
데이터베이스 객체의 통계 정보를 수집하고 관리하는 패키지이다. 이 패키지를 사용하면 데이터베이스에 있는 컬럼, 테이블, 데이터 사전(DD: Data Dictionary), 인덱스, 스키마, 시스템 등에 대한 통계 정보를 수집하고 관리 할 수 있다.

 
 

공유 풀 (Shared Pool)

공유 풀은 실행계획재이용하고 분석 작업을 줄이기 위한 공간이다.
 
분석 처리에는 막대한 CPU 자원이 활용된다.
그렇기 떄문에 분석을 통해 생성된 실행계획을 재사용 한다면 자원 소비를 획기적으로 줄일 수 있다. 

출처 - 그림으로 공부하는 오라클구조

 

공유 풀도 프로세스 간에 공유되어야 하므로 버퍼 캐시와 마찬가지로 공유메모리 안에 있다.

 
 

마무리

이 글에서는 오라클 통계정보(Oracle Analyze), 실행계획 (Execution Plan)과 관련된 기본 개념을 알아보았다. 효율적인 시스템 운영을 위해서는 효율적인 배치작업은 필수다. 쿼리 성능을 최적화 하려면 정확한 최신의 통계정보를 유지하는 것이 중요하다.
 
다음글에서는 통계정보가 어떻게 실행계획에 영향을 끼치는지 알아보고, 통계정보를 수집하는 방법에 대해 자세히 다뤄보려한다.
 
 

 

<참고>

  • 그림으로 공부하는 오라클구조 / 오다 케이지