본문 바로가기

빅데이터과정/SQL TUNING

#37_140805_TUNING_실행계획과 통계정보

728x90

# 실행계획과 통계정보



10g 버전부터는 매일 밤 10시에 자동으로 DB의 모든 테이블에 대해서 통계정보가 자동으로 수집
SQL> select cline_name, status from dba_autotask_clinet’
auto optimizer stats collection : 테이블 통계정보 확인
auto space advisor : 빈공간을 확보하는 작업
sql tuning advisor : 자동으로 SQL 튜닝



현업에서 테이블통계정보를 안하는 이유
대용량 테이블은 수집시간이 오래걸리기 때문에
새로 수집한 통계정보로 인해서 실행계획이 달라져서 기존에 잘돌던 SQL이 느려짐을 우려해서



통계정보 잠그는 명령어


DBMS_STATS.LOCK_TABLE_STATS('OE','ORDERS');




문제89. EMP 테이블에 통계정보가 수집되지 못하도록 잠그시오


SQL> EXEC dbms_stats.lock_table_stats('SCOTT','EMP');
SQL> exec dbms_stats.gather_table_stats('SCOTT','EMP');     
ERROR at line 1:
ORA-20005: object statistics are locked (stattype = ALL)
ORA-06512: at "SYS.DBMS_STATS", line 20337
ORA-06512: at "SYS.DBMS_STATS", line 20360
ORA-06512: at line 1
통계정보를 잠궈놓아서 통계정보 수집에서 오류가 발생하는 것을 확인할 수 있다



문제90. EMP 테이블의 통계정보가 수집되도록 잠금을 해제하시오

SQL> exec dbms_stats.unlock_table_stats('SCOTT','EMP);





예전의 통계정보로 되돌리는 작업

SQL> SELECT dbms_stats.get_stats_history_retention FROM dual;
GET_STATS_HISTORY_RETENTION
---------------------------
                         31
31일 동안 통계정보를 저장




통계정보를 수집했는데 성능이 떨어졌을 경우
아래의 명령어로 되돌린다

SQL> SELECT table_name, stats_update_time
FROM user_tab_stats_history
WHERE table_name='EMP';
통계정보 저장 이력
EMP       2014-08-05 오전 5:19:01
EMP       2014-08-05 오전 5:22:58
SQL> exec dbms_stats.restore_table_stats('SCOTT','EMP','05-aug-14 5:19:01 AM +09:00');
data format 을 확인해야 하고 그대로 적어줘야 한다
SELECT * FROM nls_session_parameters;