1. 개요

이 자료는 운영 중인 Oracle 데이타베이스에서 Redo를 많이 생성시키는 session 정보를 순서 대로 출력해주는 SQL 문에 대한 자료이다. 
 

2. 설명

다음 두 가지 SQL 문을 이용하면 Redo와 Undo를 많이 생성시키는 session, transaction 정보를 알 수 있다. 

2-1. 

V$SESS_IO 뷰와 V$SESSION view를 조인한다. V$SESS_IO 뷰의 BLOCK_CHANGES 라는 컬럼은 얼마나 많은 block들이 그 session에 의해서 변화되었는지를 보여준다. 이 값이 높으면 session이 많은 양의 redo를 생성시켰음을 알 수 있다. 
 
      SQL> SELECT s.sid, s.serial#, s.username, s.program,
           i.block_changes
           FROM v$session s, v$sess_io i
           WHERE s.sid = i.sid
           ORDER BY 5 desc, 1, 2, 3, 4;
위 SQL 문을 여러번 수행해서 BLOCK_CHANGES 값의 각 발생 사이의  delta 값을 비교해보면, 그 값이 클 수록 그 session이 많은 양의 redo를 생성시켰음을 알 수 있다. 

2-2.

V$TRANSACTION 뷰를 조회하면 해당 transaction에 의하여 액세스된 undo block과 undo record들의 양에 대한 정보를 알 수 있다. 그 정보는 USED_UBLK 컬럼과 USED_UREC 컬럼을 보고 알 수 있다. 
 
      SQL> SELECT s.sid, s.serial#, s.username, s.program, 
           t.used_ublk, t.used_urec
           FROM v$session s, v$transaction t
           WHERE s.taddr = t.addr
           ORDER BY 5 desc, 6 desc, 1, 2, 3, 4;
위 SQL 문을 여러번 수행해서 USED_UBLK 컬럼과 USED_UREC 컬럼의 각 발생 사이의 delta 값을 비교해보면, 그 값이 클 수록 그 session이 많은 양의 redo를 생성시켰음을 알 수 있다. 
 
위의 query에서 첫번째 query는 많은 양의 redo를 generate한 program을 check할 필요가 있을 때 사용하고, 두번째 query는 많은 양의 redo를 generate한 특정 transaction을 찾을 필요가 있을 때 사용하면 도움이 된다.