"UNDO"의 두 판 사이의 차이
DB CAFE
7번째 줄: | 7번째 줄: | ||
2.1 | 2.1 | ||
V$SESS_IO 뷰와 V$SESSION view를 조인한다. V$SESS_IO 뷰의 BLOCK_CHANGES 라는 컬럼은 얼마나 많은 block들이 그 session에 의해서 변화되었는지를 보여준다. 이 값이 높으면 session이 많은 양의 redo를 생성시켰음을 알 수 있다. | V$SESS_IO 뷰와 V$SESSION view를 조인한다. V$SESS_IO 뷰의 BLOCK_CHANGES 라는 컬럼은 얼마나 많은 block들이 그 session에 의해서 변화되었는지를 보여준다. 이 값이 높으면 session이 많은 양의 redo를 생성시켰음을 알 수 있다. | ||
− | + | ||
+ | <source lang=sql> | ||
SELECT s.sid | SELECT s.sid | ||
, s.serial# | , s.serial# | ||
, s.username | , s.username | ||
, s.program | , s.program | ||
− | , | + | , t.used_ublk |
− | FROM v$session s, v$ | + | , t.used_urec |
− | WHERE s. | + | , s.module |
− | ORDER BY 5 desc, 1, 2, 3, 4; | + | , s.action |
+ | , S.SQL_ID | ||
+ | FROM v$session s | ||
+ | , v$transaction t | ||
+ | WHERE s.taddr = t.addr | ||
+ | ORDER BY 5 desc, 6 desc, 1, 2, 3, 4; | ||
+ | |||
</source> | </source> | ||
위 SQL 문을 여러번 수행해서 BLOCK_CHANGES 값의 각 발생 사이의 delta 값을 비교해보면, 그 값이 클 수록 그 session이 많은 양의 redo를 생성시켰음을 알 수 있다. | 위 SQL 문을 여러번 수행해서 BLOCK_CHANGES 값의 각 발생 사이의 delta 값을 비교해보면, 그 값이 클 수록 그 session이 많은 양의 redo를 생성시켰음을 알 수 있다. |
2018년 10월 7일 (일) 20:21 판
- DBA { Oracle DBA 명령어 > DBA 초급 과정 > DBA 고급 과정 }
- 튜닝 { 오라클 튜닝 목록 }
- 모델링 { 데이터 모델링 가이드 }
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를 생성시켰음을 알 수 있다.
SELECT s.sid
, s.serial#
, s.username
, s.program
, t.used_ublk
, t.used_urec
, s.module
, s.action
, S.SQL_ID
FROM v$session s
, v$transaction t
WHERE s.taddr = t.addr
ORDER BY 5 desc, 6 desc, 1, 2, 3, 4;
위 SQL 문을 여러번 수행해서 BLOCK_CHANGES 값의 각 발생 사이의 delta 값을 비교해보면, 그 값이 클 수록 그 session이 많은 양의 redo를 생성시켰음을 알 수 있다.
2-2. V$TRANSACTION 뷰를 조회하면 해당 transaction에 의하여 액세스된 undo block과 undo record들의 양에 대한 정보를 알 수 있다. 그 정보는 USED_UBLK 컬럼과 USED_UREC 컬럼을 보고 알 수 있다.
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을 찾을 필요가 있을 때 사용하면 도움이 된다.