SQL Server가 실행 중인 Amazon RDS DB 인스턴스의 스토리지 사용 문제를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 9월 22일

SQL Server가 실행 중인 Amazon Relational Database Service(Amazon RDS) DB 인스턴스가 예상보다 많은 공간을 사용하고 있습니다. 왜 이런 현상이 발생하며, 디스크 스토리지를 최적화하려면 어떻게 해야 합니까?

​해결 방법

FreeStorageSpace Amazon CloudWatch 지표를 사용하여 RDS DB 인스턴스의 가용 스토리지 공간을 모니터링할 수 있습니다. 하지만 이 지표는 SQL Server 엔진이 가용 스토리지를 사용하는 방법을 설명하지 않습니다.

SQL Server DB 인스턴스의 물리적 디스크 공간 사용량에 대한 자세한 정보를 수집하려면 다음과 비슷한 쿼리를 실행합니다.

SELECT D.name AS [database_name]
    , F.name AS [file_name]
    , F.type_desc AS [file_type]
    , CONVERT(decimal(10,2), F.size * 0.0078125) AS [size_on_disk_mb]
    , CONVERT(decimal(10,2), F.max_size * 0.0078125) AS [max_size_mb]
FROM sys.master_files AS F
INNER JOIN sys.databases AS D
    ON F.database_id = D.database_id;

ROWS를 포함하는 파일은 데이터를 구성하며, LOGS를 포함하는 파일은 진행 중인 트랜잭션을 나타냅니다.

참고: sys.master_files 시스템 보기에는 tempdb의 시작 크기가 표시됩니다. tempdb의 현재 크기를 반영하지 않습니다. tempdb의 현재 크기를 확인하려면 다음 쿼리를 실행합니다.

select name AS [database_name], 
physical_name AS [file_name], 
convert(decimal(10,2),size*0.0078125) AS [size_on_disk_mb]
from tempdb.sys.database_files;

스토리지를 최적화하기 전에 SQL Server 엔진이 스토리지를 사용하는 방식을 이해해야 합니다. SQL Server 엔진 스토리지는 다음과 같은 범주를 사용하여 광범위하게 정의됩니다.

데이터베이스 파일

개별 데이터베이스에서 사용하는 총 스토리지는 다음과 유사한 쿼리를 실행하여 현재 활성 데이터베이스의 행, 인덱스 및 여유 공간으로 나눌 수 있습니다.

EXEC sp_spaceused;

트랜잭션 로그 파일

트랜잭션 로그가 사용하는 스토리지의 양을 확인하려면 다음 쿼리를 실행합니다.

DBCC SQLPERF(LOGSPACE)

트랜잭션 로그에 여유 공간이 있을 수 있지만 DBCC SHRINKFILE에 대한 Microsoft 설명서를 따르면 과도한 여유 공간을 할당 해제할 수 있습니다.

ALTER DATABASE(transact-SQL) 파일 및 파일 그룹 옵션을 사용하여 데이터베이스의 자동 증가 설정을 구성하면 트랜잭션 로그에 여유 공간이 과도하게 할당되는 것을 줄일 수 있습니다.

임시 데이터베이스(tempdb)

SQL Server tempdb는 자동으로 증가합니다. tempdb가 많은 양의 가용 스토리지를 사용하는 경우 tempdb 데이터베이스를 축소할 수 있습니다.

참고: tempdb 데이터베이스를 축소하는 경우, 명령을 실행한 후 오류 메시지가 있는지 SSMS(SQL Server Management Studio)의 [Message] 탭을 확인합니다. "DBCC SHRINKFILE: Page could not be moved because it is a work table page" 오류 메시지를 수신하는 경우, DBCC FREESYSTEMCACHEDBCC FREEPROCCACHE에 대한 Microsoft 설명서를 참조하십시오. DB 인스턴스를 재부팅하여 tempdb를 지울 수도 있습니다.

DB 인스턴스가 스토리지 용량 초과(Storage Full) 상태에 있으며 재부팅이 되지 않는 경우 DB 인스턴스에 할당된 스토리지를 늘린 다음 재부팅할 수 있습니다. 자세한 내용은 Amazon RDS DB 인스턴스에 스토리지가 부족할 때 발생하는 문제를 해결하려면 어떻게 해야 합니까?를 참조하십시오.

데이터베이스 인덱스

가용 스토리지의 상당 부분을 인덱스 전용으로 사용하는 경우 인덱스 튜닝을 통해 일부 공간을 절약할 수 있습니다. sys.dm_db_index_usage_stats 동적 관리 보기를 실행하여 인덱스 사용에 대한 자세한 정보를 수집할 수 있습니다. 이렇게 하면 조정 우선 순위를 평가할 수 있습니다.

추적 파일

C2 감사 추적 파일 및 덤프 파일을 포함한 추적 파일은 많은 디스크 공간을 사용할 수 있습니다. Amazon RDS는 7일보다 오래된 추적 및 덤프 파일을 자동으로 삭제하지만 추적 파일에 대한 보존 설정을 조정할 수도 있습니다. 자세한 내용은 추적 및 덤프 파일 작업을 참조하십시오.

Amazon S3 통합으로 소비되는 공간

RDS DB 인스턴스를 Amazon S3와 통합한 경우 공간을 차지하는 D: 드라이브에 파일을 업로드했을 수 있습니다. S3 통합에 사용된 공간의 양을 확인하려면 명령을 실행하여 DB 인스턴스에 있는 파일을 나열하면 됩니다. 자세한 내용은 Amazon S3와 SQL Amazon RDS for SQL Server 인스턴스 통합을 참조하십시오.