상세 컨텐츠

본문 제목

Oracle redo switch 횟수, redo 파일 사이즈 증설 알아보기

Oracle DBMS

by 3학년 1반 민군 2021. 2. 9. 11:22

본문

안녕하세요 오늘은 redo size증설 test했던 내용을 포스팅하겠습니다.

 

우선 redo가 어떤 역할을 하는지부터 알아보겠습니다.

 

REDO는 오라클 SGA영역에 있는 Redo Buffer 와 Redo Log File로 이루어져 있는데 Database에서 변경되는 내용을 저장하고 이는 Database의 복구를 목적으로 존재한다고 할 수 있습니다.

 

Redo가 일을 하는 조건으로는

 

매 3초마다, Log Buffer공간의 1/3이상 사용된 경우, 1MB 이상 사용되었을 경우, 사용자가 임의로 Commit 또는 Rollback한 경우, DBWR 프로세스에 의해 Disk로 변경된 내용이 기록되는 경우 등이 있습니다.

이전 고객사를 담당하며 alert.log를 확인하던 중 너무 빈번히 발생하는 로그스위치를 발견하고 redo log 증설에 대해 안내 드린 경험이 있습니다.

 

아래의 그림은 시간별 redo size 증설 전의 로그스위치 횟수를 조회한 결과입니다.

오라클에서 권고하는 시간당 리두로그 스위치의 횟수는 2~4회 정도입니다.

 

redo size 증설 전의 로그스위치의 횟수가 많게는 100회가 넘는것을 확인할 수 있습니다.

 

리두사이즈가 너무 작은경우 Wait Event가 발생할 수 있습니다.

 

발생할 수 있는 wait event의 경우 log file switch completion, log file switch archving needed, log file switch private strand flush incomplete 의 에러로그를 확인할 수 있습니다.

 

따라서 반드시 redo size증설이 필요하여 안내드렸습니다.

 

위의 이미지는 증설 후의 이미지 입니다. DB의 작업이 집중되는 시간이있어 로그스위치 횟수가 10회 넘는 시간대가 있지만

 

이전의 횟수들보다 확연히 줄어든것을 확인할 수 있습니다.


아래의 내용은 redo size 증설의 TEST내용입니다.

 

현재 리두 조회

COL MEMBER FOR A50

select l.group#, member, archived, l.status, (bytes/1024/1024) MB
from v$log l, v$logfile f
where f.group# = l.group#
order by 1;


    GROUP# MEMBER					      ARC STATUS		   MB
---------- -------------------------------------------------- --- ---------------- ----------
	 1 /*****/oracle/app/oracle/oradata/ORCL11/redo01.log NO  CURRENT		  200
	 2 /*****/oracle/app/oracle/oradata/ORCL11/redo02.log YES INACTIVE		  200
	 3 /*****/oracle/app/oracle/oradata/ORCL11/redo03.log YES INACTIVE		  200

RAC의 경우 gv$log 테이블을 조회하여 INST_ID, THREAD#컬럼을 확인할 수 있습니다.

SQL> select * from gv$log;

   INST_ID     GROUP#	 THREAD#  SEQUENCE#	 BYTES	BLOCKSIZE    MEMBERS ARC STATUS 	  FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME
---------- ---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------- ------------ ---------
	 1	    1	       1	 28  209715200	      512	   1 NO  CURRENT		1249033 02-FEB-21   2.8147E+14 (null)
	 1	    2	       1	 26  209715200	      512	   1 YES INACTIVE		1073121 29-JAN-21      1157778 31-JAN-21
	 1	    3	       1	 27  209715200	      512	   1 YES INACTIVE		1157778 31-JAN-21      1249033 02-FEB-21

SQL> SELECT * FROM V$LOG;

    GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE	  MEMBERS ARC STATUS	       FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME
---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------- ------------ ---------
	 1	    1	      28  209715200	   512		1 NO  CURRENT		     1249033 02-FEB-21	 2.8147E+14 (null)
	 2	    1	      26  209715200	   512		1 YES INACTIVE		     1073121 29-JAN-21	    1157778 31-JAN-21
	 3	    1	      27  209715200	   512		1 YES INACTIVE		     1157778 31-JAN-21	    1249033 02-FEB-21

REDO LOG 추가

REDO LOG 추가

alter database add logfile group 4 '/*****/oracle/app/oracle/oradata/ORCL11/redo04.log' size 300m;
alter database add logfile group 5 '/*****/oracle/app/oracle/oradata/ORCL11/redo05.log' size 300m;
alter database add logfile group 6 '/*****/oracle/app/oracle/oradata/ORCL11/redo06.log' size 300m;

REDO LOG 추가된 내용확인

SQL> SELECT * FROM V$LOG;

    GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE	  MEMBERS ARC STATUS	       FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME
---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------- ------------ ---------
	 1	    1	      28  209715200	   512		1 NO  CURRENT		     1249033 02-FEB-21	 2.8147E+14 (null)
	 2	    1	      26  209715200	   512		1 YES INACTIVE		     1073121 29-JAN-21	    1157778 31-JAN-21
	 3	    1	      27  209715200	   512		1 YES INACTIVE		     1157778 31-JAN-21	    1249033 02-FEB-21
	 4	    1	       0  314572800	   512		1 YES UNUSED			   0 (null)		  0 (null)
	 5	    1	       0  314572800	   512		1 YES UNUSED			   0 (null)		  0 (null)
	 6	    1	       0  314572800	   512		1 YES UNUSED			   0 (null)		  0 (null)

6 rows selected.

추가한 REDO LOG가 CURRENT 상태가 되도록 LOG SWITCH합니다.

SQL> alter system switch logfile;

System altered.

SQL> /

System altered.

SQL> /

System altered.

SQL> /

System altered.

SQL> /

System altered.

SQL> /

System altered.

SQL> SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE	  MEMBERS ARC STATUS	       FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME
---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------- ------------ ---------
	 1	    1	      34  209715200	   512		1 YES INACTIVE		     1327443 04-FEB-21	    1327446 04-FEB-21
	 2	    1	      32  209715200	   512		1 YES INACTIVE		     1327437 04-FEB-21	    1327440 04-FEB-21
	 3	    1	      33  209715200	   512		1 YES INACTIVE		     1327440 04-FEB-21	    1327443 04-FEB-21
	 4	    1	      35  314572800	   512		1 NO  CURRENT		     1327446 04-FEB-21	 2.8147E+14 (null)
	 5	    1	      30  314572800	   512		1 YES INACTIVE		     1327431 04-FEB-21	    1327434 04-FEB-21
	 6	    1	      31  314572800	   512		1 YES INACTIVE		     1327434 04-FEB-21	    1327437 04-FEB-21

6 rows selected.

CHECK POINT를 발생시켜 REDO의 내용을 기록합니다.

SQL> alter system checkpoint;

System altered.

기존의 200MB의 리두로그를 삭제합니다.

select l.group#, member, archived, l.status, (bytes/1024/1024) MB
from v$log l, v$logfile f
where f.group# = l.group#
order by 1;

    GROUP# MEMBER					      ARC STATUS		   MB
---------- -------------------------------------------------- --- ---------------- ----------
	 1 /*****/oracle/app/oracle/oradata/ORCL11/redo01.log YES INACTIVE		  200
	 2 /*****/oracle/app/oracle/oradata/ORCL11/redo02.log YES INACTIVE		  200
	 3 /*****/oracle/app/oracle/oradata/ORCL11/redo03.log YES INACTIVE		  200
	 4 /*****/oracle/app/oracle/oradata/ORCL11/redo04.log NO  CURRENT		  300
	 5 /*****/oracle/app/oracle/oradata/ORCL11/redo05.log YES INACTIVE		  300
	 6 /*****/oracle/app/oracle/oradata/ORCL11/redo06.log YES INACTIVE		  300

6 rows selected.

REDO LOG 삭제
SQL> alter database drop logfile group 1;
Database altered.

SQL> alter database drop logfile group 2;
Database altered.

SQL> alter database drop logfile group 3;
Database altered.


기존 200M 짜리 REDO LOG 삭제완료 확인

SQL> select l.group#, member, archived, l.status, (bytes/1024/1024) MB
from v$log l, v$logfile f
where f.group# = l.group#
order by 1;  2    3    4  

    GROUP# MEMBER					      ARC STATUS		   MB
---------- -------------------------------------------------- --- ---------------- ----------
	 4 /*****/oracle/app/oracle/oradata/ORCL11/redo04.log NO  CURRENT		  300
	 5 /*****/oracle/app/oracle/oradata/ORCL11/redo05.log YES INACTIVE		  300
	 6 /*****/oracle/app/oracle/oradata/ORCL11/redo06.log YES INACTIVE		  300

물리적인 파일 삭제

[oracle@ORACLE11 ~]$ cd /*****/oracle/app/oracle/oradata/ORCL11/

[oracle@ORACLE11 ORCL11]$ ll
total 5192184
-rw-r----- 1 oracle dba    8077312 Feb  4 01:28 control01.ctl
-rw-r----- 1 oracle dba    8077312 Feb  4 01:28 control02.ctl
-rw-r----- 1 oracle dba  209715712 Feb  4 01:21 redo01.log
-rw-r----- 1 oracle dba  209715712 Feb  4 01:21 redo02.log
-rw-r----- 1 oracle dba  209715712 Feb  4 01:21 redo03.log
-rw-r----- 1 oracle dba  314573312 Feb  4 01:27 redo04.log
-rw-r----- 1 oracle dba  314573312 Feb  4 01:21 redo05.log
-rw-r----- 1 oracle dba  314573312 Feb  4 01:21 redo06.log
-rw-r----- 1 oracle dba  524296192 Feb  4 01:23 sysaux01.dbf
-rw-r----- 1 oracle dba  734011392 Feb  4 01:23 system01.dbf
-rw-r----- 1 oracle dba 2097160192 Feb  3 22:00 temp01.dbf
-rw-r----- 1 oracle dba  314580992 Feb  4 01:23 undotbs01.dbf
-rw-r----- 1 oracle dba 2147491840 Feb  4 01:23 users01.dbf

[oracle@ORACLE11 ORCL11]$ rm -rf redo01.log
[oracle@ORACLE11 ORCL11]$ rm -rf redo02.log
[oracle@ORACLE11 ORCL11]$ rm -rf redo03.log
[oracle@ORACLE11 ORCL11]$ 
[oracle@ORACLE11 ORCL11]$ ll
total 4577772
-rw-r----- 1 oracle dba    8077312 Feb  4 01:29 control01.ctl
-rw-r----- 1 oracle dba    8077312 Feb  4 01:29 control02.ctl
-rw-r----- 1 oracle dba  314573312 Feb  4 01:27 redo04.log
-rw-r----- 1 oracle dba  314573312 Feb  4 01:21 redo05.log
-rw-r----- 1 oracle dba  314573312 Feb  4 01:21 redo06.log
-rw-r----- 1 oracle dba  524296192 Feb  4 01:23 sysaux01.dbf
-rw-r----- 1 oracle dba  734011392 Feb  4 01:23 system01.dbf
-rw-r----- 1 oracle dba 2097160192 Feb  3 22:00 temp01.dbf
-rw-r----- 1 oracle dba  314580992 Feb  4 01:23 undotbs01.dbf
-rw-r----- 1 oracle dba 2147491840 Feb  4 01:23 users01.dbf

4 5 6 그룹의 리두로그를 이중화 합니다.

 

이중화 할때의 경우 기존 사이즈와 동일하게 구성되기 때문에 사이즈를 지정해주지 않습니다.

SQL> alter database add logfile member '/*****/oracle/app/oracle/oradata/ORCL11/redo04_2.LOG' to group 4;
Database altered.

SQL> alter database add logfile member '/*****/oracle/app/oracle/oradata/ORCL11/redo05_2.LOG' to group 5;
Database altered.

SQL> alter database add logfile member '/*****/oracle/app/oracle/oradata/ORCL11/redo06_2.LOG' to group 6;
Database altered.

SQL> select l.group#, member, archived, l.status, (bytes/1024/1024) MB
from v$log l, v$logfile f
where f.group# = l.group#
order by 1;

    GROUP# MEMBER								  ARC STATUS		       MB
---------- ---------------------------------------------------------------------- --- ---------------- ----------
	 4 /*****/oracle/app/oracle/oradata/ORCL11/redo04_2.LOG 		  NO  CURRENT		      300
	 4 /*****/oracle/app/oracle/oradata/ORCL11/redo04.log			  NO  CURRENT		      300
	 5 /*****/oracle/app/oracle/oradata/ORCL11/redo05.log			  YES INACTIVE		      300
	 5 /*****/oracle/app/oracle/oradata/ORCL11/redo05_2.LOG 		  YES INACTIVE		      300
	 6 /*****/oracle/app/oracle/oradata/ORCL11/redo06.log			  YES INACTIVE		      300
	 6 /*****/oracle/app/oracle/oradata/ORCL11/redo06_2.LOG 		  YES INACTIVE		      300

6 rows selected.

이와같이 오늘은 REDO LOG파일의 증설에 대해 알아보았습니다.

관련글 더보기

댓글 영역