Oracle

게시글 보기
작성자 유건데이타 등록일 2015-05-15
제목 ORACLE PROCESS 가 I/O 를 과도하게 사용할 경우 조치
ORACLE PROCESS 가 I/O 를 과도하게 사용할 경우 조치 방법
=======================================================

I/O 가 heavy 하여 database 의 performance 가 떨어질 경우,
원인을 확인하는 방법은 다음과 같습니다.

먼저, i/o 를 빠르게 하기 위한 async I/O 가 setting 되어 있는지 확인합니다.
async I/O 란 사용하는 H/W level 에서 제공하는 것으로, 동시에 하나 이상의
I/O 를 할 수 있도록 해 줍니다.

SVRMGRL 또는 SQLDBA> show parameter asyn
NAME TYPE VALUE
----------------------------------- -------
async_read boolean TRUE
async_write boolean TRUE

위의 값이 false 이면, H/W 가 Async I/O 를 제공하는지 확인한 후에,
$ORACLE_HOME/dbs/initSID.ora 에 위 값을 True 로 setting 하고
restartup 해 줍니다.

(Async I/O 가 제공되지 않을 경우, OS channel 한개 당 하나의
dbwr process 가 기동되도록 할 수 있습니다. db_writers 를 늘려주는 방법
을 고려할 수도 있습니다.)

두 번째 방법은 각 데이타 화일의 I/O를 확인해서, I/O 가 빈번한 데이타 화일을
찾아 disk 를 옮겨 주거나 table을 다른 데이타 화일로 move해줍니다.

다음 결과에 의해 각 datafile 의 access가 다른 datafile의 수치와 비슷할 때,
데이타들이 잘 분산되어 I/O 병목 현상이 없는 것입니다.

다음은 datafile 6, 7번에 read 가 집중되어 있습니다.
만약, I/O 속도의 향상을 원한다면, 자주 read 되는 table 을 찾아서 다른 disk의
datafile 로 옮겨 주는 것이 좋은 경우입니다.

SQL> select file#, phyrds, phywrts from v$filestat;

FILE# PHYRDS PHYWRTS
-------------------- -------------------- --------------------
1 61667 26946
2 2194 58882
3 1972 189
4 804 2
5 7306 13575
6 431859 21137
7 431245 3965
8 307 19


마지막으로, I/O 가 빈번한 session 을 찾아 내어 어떤 작업을 하는지
확인하는 방법입니다.
Session ID를 알 수 있으므로, 이 session 의 SQL 문을 확인한 후에
I/O 를 줄일 수 있는 SQL 문으로 조정하십시오.

(tkprof 를 이용하여 plan 과 소요 시간을 확인할 수 있습니다.)

SQL> select sid, physical_reads, block_changes from v$sess_io



SID PHYSICAL_READS BLOCK_CHANGES
-------------------- -------------------- --------------------
1 0 0
2 0 0
3 0 0
4 15468 379
5 67 0
6 0 6
7 1 105
8 2487 2366
9 61 14
11 311 47
Comment
등록된 코멘트가 없습니다.