Oracle

게시글 보기
작성자 유건데이타 등록일 2015-02-06
제목 (V8.X ~ V9.X) UNDO/REDO 를 많이 생성시키는 SESSION을 찾아주는 SQL 문
(V8.X ~ V9.X) UNDO/REDO 를 많이 생성시키는 SESSION을 찾아주는 SQL 문
====================================================================

PURPOSE
-------

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


Explanation
-----------

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

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) 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을 찾을 필요가
있을 때 사용하면 도움이 된다.


Example
-------
none


Reference Document
------------------
Comment
등록된 코멘트가 없습니다.