대용량 데이터 작업 시(DML) DBA가 체크해야 할 사항

·2024년 12월 20일

대용량 데이터 작업(INSERT, DELETE, UPDATE)은 데이터베이스 성능과 안정성에 큰 영향을 미칠 수 있습니다. DBA는 이러한 작업을 수행할 때 시스템 자원, 로그 사용량, 병목 현상 등을 모니터링하여 데이터 손실과 성능 저하를 방지해야 합니다.

1. Redo Log와 Archive Log 확인

Redo Log는 데이터베이스 변경 사항을 기록하며, 데이터 복구에 필수적입니다. 대량 작업 시 Redo Log와 Archive Log는 빠르게 증가하기 때문에 다음 사항을 점검해야 합니다.

Redo Log 용량:
ALTER SYSTEM SWITCH LOGFILE 명령을 통해 수동으로 로그 스위치를 실행하며, 적절한 용량인지 확인합니다.
Redo Log 파일이 너무 작으면 빠르게 순환하면서 작업 병목이 발생할 수 있습니다.

-- REDO LOG 파일 상태
select thread#,l.group#,f.member,l.bytes/1024/1024 mb, l.status, l.archived
from v$log l, v$logfile f
where l.group#=f.group#
order by thread#,l.group#,thread#,f.member;

Archive Log 공간 확인:
Archive Log가 저장되는 디스크 공간(FRA: Fast Recovery Area)을 점검합니다. 공간 부족 시 작업 중단 또는 데이터 손실이 발생할 수 있습니다.

-- archive log 사용량
select name,
       round(space_limit/1024/1024/1024,2) as space_limit,
       round(space_used/1024/1024/1024,2) as space_used,
       round(round(space_used/1024/1024/1024,2)/round(space_limit/1024/1024/1024,2)*100,2) as percent,
       space_reclaimable,
       number_of_files,
       con_id
from v$recovery_file_dest;
 

FRA 설정 확인:
SHOW PARAMETER db_recovery_file_dest_size;

2. Undo Tablespace 모니터링

대량 작업은 Undo Tablespace 사용량을 급격히 증가시킬 수 있습니다. Undo는 트랜잭션을 롤백하거나 읽기 일관성을 보장하는 데 필요합니다.

Undo Tablespace 사용량 확인:
SELECT a.tablespace_name, a.file_name, a.bytes/1024/1024 AS size_mb, b.tablespace_size*8/1024 AS max_size_mb
FROM dba_data_files a, v$undostat b;
Autoextend 여부 확인: Undo Tablespace가 Autoextend 상태인지 점검하여 공간 부족을 방지합니다:
ALTER DATABASE DATAFILE '/path_to_undo_file' AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED;

-- 현재 undo tablespace 사용량
select owner,segment_name,status,sum(bytes)/1024/1024 as mb_used
from dba_undo_extents
where tatus ='active'
group by owner,segment_name,status
order by mb_used desc;

-- 어떤 세션이 undo를 사용하고 있는지 확인
select to_char(s.sid)||','||to_char(s.serial#) sid_serial, 
       nvl(s.username,'NONE') orauser, 
       s.program,
       r.name undoseg, 
       t.used_ublk*to_number(x.value)/1024/1024||'M' "undo"
from v_$rollname r, v_$session s, v_$transaction t, v_$parameter x 
where s.taddr = t.addr
     and r.usn=t.xidusn(+)
     and x.name='db_block_size'
order by undo desc;

cf) DML 작업을 하다가 기본적인 명령어를 sqlplus에 입력했는데도 엄청 로딩 걸리면서 조회가 되지 않을 때, archive log 가 FULL 인지 확인해봐야한다.

su - oracle
rman target /
delete archivelog all completed before 'sysdate-3';
profile
금융권 DBA (ORACLE)

0개의 댓글