Amazon RDS for Oracle DB 인스턴스에서 예상보다 많은 스토리지를 사용하는 이유는 무엇인가요?

6분 분량
0

Oracle DB 인스턴스용 Amazon Relational Database Service(RDS)에서 예상보다 많은 공간을 사용합니다.

간략한 설명

Amazon RDS for Oracle 인스턴스용 기본 스토리지는 다양한 구성 요소에서 사용될 수 있습니다. 이러한 구성 요소에는 테이블 스페이스, 아카이브 로그, 로그 파일, 온라인 재실행 로그 파일, 데이터 펌프 파일이 있습니다.

인스턴스에서 스토리지 증가를 관리하려면 구성 요소가 사용하는 스토리지 공간의 양을 파악하세요.

  1. 임시 테이블스페이스를 포함한 모든 테이블스페이스의 데이터에 할당된 공간의 양을 찾습니다.

  2. 아카이브 로그 또는 추적 파일에 할당된 공간을 확인합니다.

    1. 데이터 펌프 디렉터리의 공간 할당량을 확인합니다.

참고: RDS 인스턴스에 할당된 스토리지 공간은 데이터 볼륨을 나타냅니다. 인스턴스를 만들면 Amazon RDS에서 할당된 스토리지를 데이터 볼륨에 매핑합니다. 이 프로세스에서는 물리적 스토리지 볼륨에 더해 파일 시스템을 생성하기 위해 원시 디스크 공간을 적은 비율을 사용합니다.

해결 방법

테이블스페이스에서 데이터에 할당된 공간의 양 찾기

Oracle 데이터베이스의 여러 구성 요소에 할당된 공간의 분포를 확인하려면 다음 쿼리를 사용합니다.

set pages 200
select
'===========================================================' || chr(10) ||
'Total Database Physical Size = ' || round(redolog_size_gib+dbfiles_size_gib+tempfiles_size_gib+ctlfiles_size_gib,2) || ' GiB' || chr(10) ||
'===========================================================' || chr(10) ||
' Redo Logs Size : ' || round(redolog_size_gib,3) || ' GiB' || chr(10) ||
' Data Files Size : ' || round(dbfiles_size_gib,3) || ' GiB' || chr(10) ||
' Temp Files Size : ' || round(tempfiles_size_gib,3) || ' GiB' || chr(10) ||
' Archive Log Size - Approx only : ' || round(archlog_size_gib,3) || ' GiB' || chr(10) ||
' Control Files Size : ' || round(ctlfiles_size_gib,3) || ' GiB' || chr(10) ||
'===========================================================' || chr(10) ||
' Used Database Size : ' || used_db_size_gib || ' GiB' || chr(10) ||
' Free Database Size : ' || free_db_size_gib || ' GiB' ||chr(10) ||
' Data Pump Directory Size : ' || dpump_db_size_gib || ' GiB' || chr(10) ||
' BDUMP Directory Size : ' || bdump_db_size_gib || ' GiB' || chr(10) ||
' ADUMP Directory Size : ' || adump_db_size_gib || ' GiB' || chr(10) ||
'===========================================================' || chr(10) ||
'Total Size (including Dump and Log Files) = ' || round(round(redolog_size_gib,2) +round(dbfiles_size_gib,2)+round(tempfiles_size_gib,2)+round(ctlfiles_size_gib,2) +round(adump_db_size_gib,2) +round(dpump_db_size_gib,2)+round(bdump_db_size_gib,2),2) || ' GiB' || chr(10) ||
'===========================================================' as summary
FROM (SELECT sys_context('USERENV', 'DB_NAME')
db_name,
(SELECT SUM(bytes) / 1024 / 1024 / 1024 redo_size
FROM v$log)
redolog_size_gib,
(SELECT SUM(bytes) / 1024 / 1024 / 1024 data_size
FROM dba_data_files)
dbfiles_size_gib,
(SELECT nvl(SUM(bytes), 0) / 1024 / 1024 / 1024 temp_size
FROM dba_temp_files)
tempfiles_size_gib,
(SELECT SUM(blocks * block_size / 1024 / 1024 / 1024) size_gib
FROM v$archived_log
WHERE first_time >= SYSDATE - (
(SELECT value
FROM rdsadmin.rds_configuration
WHERE name =
'archivelog retention hours') /
24 ))
archlog_size_gib,
(SELECT SUM(block_size * file_size_blks) / 1024 / 1024 / 1024
controlfile_size
FROM v$controlfile)
ctlfiles_size_gib,
round(SUM(used.bytes) / 1024 / 1024 / 1024, 3)
db_size_gib,
round(SUM(used.bytes) / 1024 / 1024 / 1024, 3) - round(
free.f / 1024 / 1024 / 1024)
used_db_size_gib,
round(free.f / 1024 / 1024 / 1024, 3)
free_db_size_gib,
(SELECT round(SUM(filesize) / 1024 / 1024 / 1024, 3)
FROM TABLE(rdsadmin.rds_file_util.listdir('BDUMP')))
bdump_db_size_gib,
(SELECT round(SUM(filesize) / 1024 / 1024 / 1024, 3)
FROM TABLE(rdsadmin.rds_file_util.listdir('ADUMP')))
adump_db_size_gib,
(SELECT round(SUM(filesize) / 1024 / 1024 / 1024, 3)
FROM TABLE(rdsadmin.rds_file_util.listdir('DATA_PUMP_DIR')))
dpump_db_size_gib
FROM (SELECT bytes
FROM v$datafile
UNION ALL
SELECT bytes
FROM v$tempfile) used,
(SELECT SUM(bytes) AS f
FROM dba_free_space) free
GROUP BY free.f);

기본적으로 Oracle DB 인스턴스용 Amazon RDS에는 모든 테이블스페이스에 자동 확장을 사용하도록 설정되어 있습니다. 여기에는 데이터 테이블스페이스, 실행 취소 테이블스페이스 및 임시 테이블스페이스가 있습니다. 즉, 각 테이블스페이스에서 더 많은 데이터를 수용하도록 확장됩니다. 이 기능은 더 이상 스토리지가 필요하지 않거나 할당된 스토리지 공간을 모두 사용할 때까지 계속됩니다.

테이블 공간 크기 조정

데이터 테이블스페이스 및 실행 취소 테이블스페이스

데이터 및 실행 취소 테이블스페이스의 크기를 조정하려면 Amazon RDS for Oracle DB 인스턴스의 테이블스페이스 크기를 조정하려면 어떻게 하나요?를 참고하세요.

임시 테이블스페이스

  1. 임시 테이블스페이스 사용량에 대한 정보를 보려면 DBA_TEMP_FREE_SPACE 뷰에서 다음 쿼리를 실행합니다.
SQL> SELECT * FROM dba_temp_free_space;
  1. 임시 테이블스페이스의 크기를 조정하려면(예: 10GB로 조정) 테이블스페이스 사용량 쿼리의 출력에 따라 다음 쿼리를 실행합니다.
SQL> ALTER TABLESPACE temp RESIZE 10g;

할당된 테이블스페이스가 10GB 임계값을 초과하면 이 명령이 실패할 수 있습니다.

  1. 명령이 실패하면 임시 테이블스페이스의 공간이 축소됩니다.
SQL> ALTER TABLESPACE temp SHRINK SPACE KEEP 10g;
  1. 디스크에 활성 정렬을 수행하고 임시 세그먼트가 할당된 장기 실행 세션을 확인합니다. 이렇게 하려면 다음 쿼리를 실행합니다.
SQL> SELECT * FROM v$sort_usage;
  1. 애플리케이션 로직 및 비즈니스에서 세션 종료를 허용하는 경우 세션을 종료합니다. 그 후 2단계와 같이 임시 테이블스페이스의 크기를 다시 조정합니다.

  2. 세션을 종료할 수 없는 경우 새 임시 테이블스페이스를 만듭니다. 그런 다음 새 테이블스페이스를 기본값으로 설정하고 이전 임시 테이블스페이스를 삭제합니다.

SQL> SELECT property_name,property_value FROM DATABASE_PROPERTIES where PROPERTY_NAME='DEFAULT_TEMP_TABLESPACE';
SQL> create temporary tablespace temp2;
SQL> exec rdsadmin.rdsadmin_util.alter_default_temp_tablespace(tablespace_name => 'temp2');
<wait for a few minutes and verify if the default temporary tablespace for all users have been updated>
SQL> set pages 2000
SQL> column username for a30
SQL> select username, TEMPORARY_TABLESPACE from dba_users;
SQL> drop tablespace temp including contents and datafiles;

아카이브 로그 또는 추적 파일의 공간 할당 확인

  1. 현재 아카이브 로그 보존을 확인합니다.
SQL> SELECT value FROM rdsadmin.rds_configuration WHERE name ='archivelog retention hours';

Amazon RDS for Oracle 인스턴스에서 아카이브 로그 보존은 기본적으로 0으로 설정되어 있습니다. 즉, 아카이브 로그가 Amazon S3에 업로드된 후 Amazon RDS가 기본 호스트에서 자동으로 삭제합니다. Oracle LogMiner 또는 GoldenGate와 같은 제품과 함께 아카이브 로그를 사용해야 하는 경우 아카이브 로그 보존 기간을 늘리세요.

  1. 기본 호스트에서 아카이브 로그가 사용하는 공간을 계산합니다. 먼저 아카이브 로그 디렉터리를 생성합니다.
SQL> EXEC rdsadmin.rdsadmin_master_util.create_archivelog_dir;

그런 다음 RDS 인스턴스에서 아카이브 로그의 정확한 사용량을 파악합니다.

SQL> SELECT sum(FILESIZE)/1024/1024/1024 archivelog_usage_GiB FROM TABLE(rdsadmin.rds_file_util.listdir(p_directory => 'ARCHIVELOG_DIR'));
  1. 아카이브 로그에 할당된 공간이 예상보다 많으면 보존 정책 값을 업데이트합니다. 그런 다음 Amazon RDS 자동화가 이전 아카이브 로그 파일을 지우도록 허용합니다. 다음은 아카이브 로그를 24시간 동안 유지하도록 구성된 RDS for Oracle 인스턴스 예입니다.
begin
 rdsadmin.rdsadmin_util.set_configuration(name => 'archivelog retention hours', value => '24');
end;
 /
commit;

추적 파일 목록 보기 및 제거와 관련한 자세한 내용은 추적 파일 제거를 참고하세요.

데이터 펌프 디렉터리의 공간 할당 확인

  1. 데이터 펌프 디렉터리에 할당된 공간이 예상보다 많으면 제거할 수 있는 .dmp 파일을 찾습니다.
SQL> SELECT * FROM TABLE(RDSADMIN.RDS_FILE_UTIL.LISTDIR('DATA_PUMP_DIR')) ORDER by mtime;
  1. 이 쿼리로 .dmp 파일을 찾으면 다음 쿼리를 사용하여 삭제합니다. 파일 이름을 .dmp 파일의 이름으로 바꿉니다.
SQL> EXEC utl_file.fremove('DATA_PUMP_DIR','[file name]');

관련 정보

Amazon RDS DB 인스턴스용 스토리지 사용

세션 종료

Amazon RDS 인스턴스의 지표 모니터링

Amazon RDS DB 인스턴스에 저장 공간이 부족할 경우