카테고리 없음

ORACLE 장시간의 HARD PARSING 유발 쿼리

Walking again 2008. 11. 30. 11:43

ORACLE 장시간의 HARD PARSING 유발 쿼리

여기서는 하나의 쿼리가 장시간의 수행타임을 가지는 쿼리를 만들어보겠다.

 

1. HARD PARSING

A.   SQL 수행중 발생한다.

B.   PARSING -> BIND -> EXECUTE -> FETCH 과정중 PARSING에 해당한다

C.   위 수행 과정 중에 대부분의 수행시간을 차지한다.

2. HARD PARSING 유발 요인

A.   Literal SQL

B.   적정 크기보다 작은 shared_pool_size

C.   부적절한 SQL

3. HARD PARSING 예제

A.   대량의 table 생성

SQL> spool make.sql

SQL> set serveroutput on

SQL> get m_tbs

  1  declare

  2     temp varchar2(2000);

  3  begin

  4     dbms_output.enable(1000000);

  5     for i in 1..2000 loop

  6             dbms_output.put_line('create table tb'||i||'(id number);');

  7     end loop;

8* end;

SQL>/

(실행…)

SQL> spool off

SQL> set serveroutput off

make.sql 을 확인하고 불필요한 부분 수정 / 삭제

sys가 아닌 일반유저로 접속

( SYSTEM TABLESPACE에 생성하면 후에 삭제하기 번거로워진다.)

스크립트를 실행한다.

SQL>@make

 

B.   생성한 테이블을 JOIN 구문으로 편집한다.

SQL> set serveroutput on

SQL> spool table.sql

SQL> get join

  1  declare

  2     temp varchar2(200);

  3  begin

  4     for i in 1..2000 loop

  5             select 'test.tb'||i||',' into temp from dual;

  6             dbms_output.put_line(temp);

  7     end loop;

  8* end;

PL/SQL procedure successfully completed.

 

SQL> spool off

SQL>set serveroutput off

 

select * from tb1,tb2, …, tb2000; 형태로 만든다.

 

4. 기존에 만들었던 script를 이용해 trace 한다.

OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS

 

call     count       cpu    elapsed       disk      query    current        rows

------- ------  -------- ---------- ---------- ---------- ----------  ----------

Parse        2    568.80     555.69          0          0          0           0

Execute      3      0.00       0.00          0          0          0           0

Fetch        1      0.00       0.00          0          3          0           0

------- ------  -------- ---------- ---------- ---------- ----------  ----------

total        6    568.80     555.70          0          3          0           0

 

Misses in library cache during parse: 1

 

하나 파싱하는데 거의 10분 가까이 걸렸다.