옵티마이저(Optimizer)
- 카테고리 없음
- 2017. 12. 12. 22:31
Analzyze 명령어는 테이블, 인덱스, 클러스터의 통계 정보를 생성하는데, 이 통계 정보들은 비용 기준의 옵티마이저가 가장 효율적인 실행계획을 수립하기 위해 최소비용을 계산할 때 중요하게 사용됩니다.
오라클에서는 SPOOL 기능을 이용하여 txt파일이나 sam파일에 검색된 데이터를 저장할 수 있다.
Analyze에서는 테이블, 인덱스, 클러스터에 다양한 통계를 얻기 위해 전체(compute) 테이블을 엑세스하여 수집, 계산하거나, 일부의 표본을 추출해(estimate) 산정합니다. 전체 테이블에 대한 통계 작업을 권장하지만 데이터가 많은 경우에는 시스템에 부하를 줄 수 있으므로 작업 시간 조정이 필요합니다.
FIRST_ROWS : CBO의 일종으로 전체 응답시간에 관계없이 일부 데이터를 먼저 보여 줄 수 있도록 최적화된 모드, ON_LINE처리 시에 좋은 성능을 발휘한다.
테이블을 ANALYZE하면 INDEX들을 같이 ANALYZE 됩니다.
많은 테이블을 일일이 작업하기가 힘드므로, 다음 SQL문의 결과 FILE을 생성해 주기적으로 ANALYZE 작업을 해주는 것이 좋습니다.
-- header가 display되지 않고 데이터만 display
set heading off
-- pagesize의 default는 14이며 그대로 하면 14줄마다 1줄씩 공백이 생기므로 그런 현상을 방지하기 위해 크게 지정
-- linesize도 80으로 크게 지정 그럼으로해서 아래로 구분되지 않도록 한다
set pagesize 1000 linesize 80
-- 조회 결과가 화면에 나오지 않도록하고
-- 명령이 display되지 않고
-- 피드백 메세지도 리턴되지 않도록 하기
set termout off echo off feedback off
-- data가 들어가는 파일 이름을 지정
spool analyze_tab.sql
SELECT 'ANALYZE TABLE '||TABLE_NAME||
' COMPUTE STATISTICS; '||CHR(10)
FROM USER_TABLES;
spool off
set termout on echo on feedback on heading on
-- ANALYZE 작업 여부 쉽게 알 수 있는 방법
SELECT TABLE_NAME, LAST_ANALYZED, NUM_ROWS
FROM USER_TABLES;
-- 다량의 테이블을 analyze하면서 기본적인 로그 사항이 필요한 경우
PROMPT
PROMPT 'EX06 : Analyze 작업에 대한 log 생성'
PROMPT
set heading off
set pagesize 1000 linesize 80
set termout off echo off feedback off
spool analyze_tab.sql
SELECT 'prompt '||chr(10),
'prompt '||rownum||'.'||table_name||chr(10),
'analyze table '||table_name||' compute statistics; '
||chr(10)
FROM USER_TABLES
/
spool off
spool analyze.log
prompt
prompt =============
prompt
prompt 'Start Time !'
select TO_CHAR(sysdate,'YYYY-MM-DD HH24:MI:SS') NOW from dual
/
start analyze_tab.sql
prompt
prompt 'Ended Time !'
select TO_CHAR(sysdate,'YYYY-MM-DD HH24:MI:SS') NOW from dual
/
spool off
set termout on echo on feedback on heading on
이 글을 공유하기