SQL Server DB 인스턴스용 RDS의 스토리지 사용량 문제를 해결하려면 어떻게 해야 하나요?

최종 업데이트 날짜: 2022년 10월 17일

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

간략한 설명

Amazon CloudWatch의 FreeStorageSpace 지표를 사용하여 DB 인스턴스의 사용 가능한 스토리지를 모니터링합니다. 이 지표를 자주 모니터링하고 스토리지 자동 크기 조정을 켜면 인스턴스의 스토리지 부족(스토리지 가득 참(Storage Full) 상태)을 방지하는 데 도움이 됩니다.

하지만 FreeStorageSpace 지표는 SQL Server 엔진이 사용 가능한 스토리지를 어떻게 소비하고 있는지 설명하지 않습니다.

해결 방법

스토리지 가득 참 상태의 Amazon RDS for SQL Server 인스턴스

RDS 인스턴스가 스토리지 가득 참(Storage Full) 상태에서 멈춘 상태에서는 기본 작업을 수행할 수 없습니다. 자세한 내용은 Amazon RDS DB 인스턴스에 스토리지가 부족할 때 발생하는 문제를 해결하려면 어떻게 해야 하나요?를 참조하세요.

일부 RDS for SQL Server DB 인스턴스에는 스토리지 수정에 제한이 있습니다. 수정 대상이 아닌 DB 인스턴스의 경우 Amazon RDS 콘솔에서 할당된 스토리지(Allocated storage) 옵션이 비활성화됩니다. 수정 옵션을 사용할 수 없는 경우 인스턴스의 스토리지를 확장하려면 기본 백업 및 복원을 사용하여 데이터를 새 인스턴스로 마이그레이션하세요. 새 인스턴스에 프로비저닝된 IOPS가 있거나 범용(SSD) 스토리지 유형인지 확인하세요. 또는 데이터 마이그레이션 도구를 사용하여 새 인스턴스로 마이그레이션할 수도 있습니다. 자세한 내용은 Amazon RDS DB 인스턴스 수정을 참조하세요.

다음 AWS Command Line Interface(AWS CLI) 명령을 사용하여 DB 인스턴스에 유효한 스토리지 옵션을 반환합니다.

describe-valid-db-instance-modifications

참고: 마그네틱 스토리지를 사용하는 SQL Server 인스턴스용 RDS에서는 스토리지 확장 및 스토리지 자동 크기 조정이 지원되지 않습니다.

스토리지 자동 크기 조정이 켜진 인스턴스의 경우 특정 시나리오에서만 스토리지가 확장됩니다. 자세한 내용은 Amazon RDS 스토리지 자동 크기 조정을 통해 자동으로 용량 관리를 참조하세요. 또한 최대 저장소 임곗값이 저장소 증분 값과 같지 않거나 초과하지 않는 경우에만 저장소가 확장됩니다. 자세한 내용은 제한 사항을 참조하세요.

SQL Server 인스턴스용 RDS 스토리지 사용량

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를 지울 수도 있습니다.

스토리지 가득 참(Storage Full) 상태인 DB 인스턴스는 재부팅하지 못할 수 있습니다. 이 경우 DB 인스턴스에 할당된 스토리지를 늘린 다음 재부팅하세요. 자세한 내용은 Amazon RDS DB 인스턴스에 스토리지가 부족할 때 발생하는 문제를 해결하려면 어떻게 해야 하나요?를 참조하세요.

데이터베이스 인덱스

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

추적 파일

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

Amazon S3 통합에 사용되는 공간

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

CDC

CDC가 켜진 데이터베이스의 경우 소스 테이블 또는 데이터베이스의 변경 빈도에 따라 로그 파일 크기가 커집니다. 결국 스토리지가 부족할 수 있습니다. 로그 디스크가 가득 차면 CDC는 추가 트랜잭션을 처리할 수 없습니다.

감사

인스턴스에 대한 감사가 제대로 구성되지 않은 경우 로그가 기하급수적으로 증가하고 스토리지에 영향을 미칠 수 있습니다. 자세한 내용은 SQL Server 감사 사용을 참조하세요.

C2 감사 모드는 많은 양의 이벤트 정보를 로그 파일에 저장합니다. 이 경우 로그 파일이 빠르게 커져서 인스턴스가 스토리지 가득 참 상태로 전환될 수 있습니다. 자세한 내용은 Microsoft 설명서의 C2 감사 모드 서버 구성 옵션을 참조하세요.

또한 쿼리 저장과 같은 기능을 켜면 리소스 사용률에도 영향을 미칠 수 있습니다.