본문 바로가기

IT관련

오라클DB에서 큰작업 돌릴때 얼마나 수행되었는지 진행상태 확인하는 방법

오라클 DB 에서 뭔가 큰테이블을 생성하거나 대량으로 데이터를 Insert 하는 등의 대형작업을 수행할 때,

언제쯤 내 작업이 끝날지, 지금 얼마나 수행되었는지 궁금할때가 있습니다.

 

이때 확인하는 방법들중에 Realtime SQL Monitor 기능을 이용하는 방법을 살펴보겠습니다.

Realtime SQL Monitor 에 대해서는 예전에 포스팅한게 있으니 참고 바랍니다.  >> 여기 클릭 <<

 

 

대형작업을 시연하기 위해서 아래와 같이 connect by 문을 이용해서 2천만건의 데이터를 가진 테이블을 만들어보겠습니다.

 

 

위 CTAS SQL 문장은 데이터건수도 많지만, 레코드 길이도 lpad() 함수를 써서 매우 길게 만들어집니다.

즉, 대량으로 데이터를 Writing 하는 좀 오래 걸리는 작업 되겄심다~

 

 

위 작업이 계속 돌고 있는 상태에서 이 작업이 얼마나 수행되었는지 보기 위해 새로운 창을 띄웁니다.

새로운 SQL Plus 창에서 아래의 스크립트를 수행합니다.

 


SQL> 
set long 1000000 longchunksize 1000000 linesize 1000 pagesize 0
set trim on trimspool on echo off feedback off tab off
set verify off

select dbms_sqltune.report_sql_monitor_list(type=>'TEXT', report_level=>'ALL', active_since_sec=>60) as report from dual;

 

위 SQL을 실행하면 아래와 같이 현재 실행되고 있는 SQL TextSQL ID 를 확인할 수 있습니다.

SQL Text 를 보고 내가 실행중인 SQL ID 값을 찾는 겁니다.

 

 

위에서 찾은 SQL ID 값을 아래 스크립트를 실행하면서 입력해주면 됩니다.

 


SQL> 
set long 1000000
set longchunksize 1000000
set linesize 1000
select DBMS_SQLTUNE.report_sql_monitor(sql_id => '&sql_id', type=>'TEXT' , report_level => 'ALL') from dual;

 

그러면, 아래처럼 SQL 문, 통계정보, 실행계획 등이 나오는 것을 확인할 수 있습니다.

 

 

위 실행계획에 보면 Rows(Actual) 값이 9M 라고 나옵니다. 이건 9백만건을 처리했다는 얘기입니다.

좀 시간을 두고 다시 똑같이 실행해보면 이 값이 점점 늘어나는 것을 확인할 수 있습니다.

 

 

이제 12M 이라고 나오네요. 1천2백만건을 처리한 것입니다.

2천만건 중에서 1천2백만건을 처리했으니 반절이상 처리한 것을 확인할 수 있습니다.

 

이렇게 Realtime SQL Monitoring 기능을 이용하면 쉽게 Long Transaction 의 작업상황을 모니터링 가능합니다.