데이터베이스 축소

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

이 문서에서는 SQL Server Management Studio 또는 Transact-SQL에서 개체 탐색기를 사용하여 SQL Server에서 데이터베이스를 축소하는 방법을 설명합니다.

데이터 파일을 축소하면 파일의 끝에서 파일 앞부분에 있는 비어 있는 공간으로 데이터 페이지를 이동하여 공간을 복구할 수 있습니다. 파일 끝에 사용 가능한 공간을 충분히 확보한 다음 파일 끝에 있는 데이터 페이지를 할당 해제하고 파일 시스템에 반환할 수 있습니다.

제한 사항

  • 데이터베이스는 데이터베이스의 최소 크기보다 작게 만들 수 없습니다. 최소 크기는 데이터베이스를 처음 만들 때 지정된 크기나 DBCC SHRINKFILE과 같은 파일 크기 변경 작업을 사용하여 명시적으로 설정한 최종 크기입니다. 예를 들어 원래 10MB로 생성된 데이터베이스가 100MB까지 증가한 경우 포함된 모든 데이터를 삭제하더라도 데이터베이스를 10MB 이하로는 축소할 수 없습니다.

  • 데이터베이스가 백업되는 동안에는 데이터베이스를 축소할 수 없습니다. 반대로 데이터베이스에 대한 축소 작업이 처리되는 동안에는 데이터베이스를 백업할 수 없습니다.

권장 사항

  • 현재 데이터베이스에 있는 여유(할당되지 않은) 공간의 양을 보려면 자세한 내용은 데이터베이스의 데이터 및 로그 공간 정보 표시를 참조하세요.

  • 데이터베이스를 축소할 때는 다음을 고려하세요.

    • 축소 작업은 큰 DELETE 문, 테이블 잘라내기 또는 테이블 삭제 작업과 같이 사용되지 않은 저장 공간을 많이 생성하는 작업 후에 가장 효과적입니다.

    • 대부분의 데이터베이스에는 정기적인 일상 작업에 사용 가능한 일정 여유 공간이 필요합니다. 데이터베이스를 반복해서 축소하지만 데이터베이스 크기가 다시 늘어나는 경우 이는 일반 작업을 위한 여유 공간이 필요함을 나타냅니다. 이러한 경우 데이터베이스를 반복적으로 축소하는 것은 낭비되는 작업입니다. 데이터베이스 파일을 증가시키는 데 필요한 자동 증가 이벤트는 성능을 저하합니다.

    • 축소 작업은 데이터베이스 인덱스의 조각화 상태를 보존하지 않으며 일반적으로 조각화 정도를 어느 정도까지 늘리기도 합니다. 데이터베이스를 반복적으로 축소하지 않는 또 다른 이유입니다.

    • 특정 요구 사항이 없으면 AUTO_SHRINK 데이터베이스 옵션을 ON으로 설정하지 마세요.

권한

sysadmin 고정 서버 역할의 멤버 또는 db_owner 고정 데이터베이스 역할의 멤버여야 합니다.

설명

진행 중인 축소 작업은 데이터베이스의 다른 쿼리를 차단할 수 있으며 이미 진행 중인 쿼리에 의해 차단될 수 있습니다. SQL Server 2022(16.x)에 도입된 축소 데이터베이스 작업에는 WAIT_AT_LOW_PRIORITY 옵션이 있습니다. 이 기능은 DBCC SHRINKDATABASEDBCC SHRINKFILE에 대한 새로운 추가 옵션입니다. WAIT_AT_LOW_PRIORITY 모드의 새 축소 작업이 이미 진행 중인 장기 실행 쿼리로 인해 필요한 잠금을 얻을 수 없는 경우 축소 작업은 결국 1분 후에 시간이 초과되고 자동으로 종료되어 다른 쿼리가 차단되지 않습니다. 자세한 내용은 DBCC SHRINKDATABASE를 참조하세요.

Azure SQL Database와 관련된 파일 관리 및 축소 작업에 대한 자세한 내용은 Azure SQL Database의 데이터베이스에 대한 파일 공간 관리를 참조하세요.

SQL Server Management Studio 사용

적용 대상: SQL Server, Azure SQL Managed Instance

데이터베이스 축소

  1. 개체 탐색기 SQL Server 데이터베이스 엔진 인스턴스에 연결한 다음 해당 인스턴스를 확장합니다.

  2. 데이터베이스를 확장 다음 축소할 데이터베이스를 마우스 오른쪽 단추로 클릭합니다.

  3. 작업, 축소를 차례로 가리킨 다음, 데이터베이스를 선택합니다.

    • Database

      선택한 데이터베이스의 이름을 표시합니다.

    • 현재 할당된 공간

      선택한 데이터베이스에 사용되는 총 공간과 사용되지 않은 공간을 표시합니다.

    • 사용 가능한 공간

      선택한 데이터베이스의 로그 및 데이터 파일에서 사용 가능한 공간의 합계를 표시합니다.

    • 사용되지 않는 공간을 해제하기 전에 파일 다시 구성

      이 옵션을 선택하는 것은 대상 백분율 옵션을 지정하는 DBCC SHRINKDATABASE를 실행하는 것과 같습니다. 이 옵션을 지우는 것은 TRUNCATEONLY 옵션을 사용하여 DBCC SHRINKDATABASE를 실행하는 것과 같습니다. 기본적으로 이 옵션은 대화 상자가 열릴 때 선택되지 않습니다. 이 옵션을 선택하면 사용자가 대상 백분율 옵션을 지정해야 합니다.

    • 축소 후 파일의 최대 여유 공간

      데이터베이스가 축소된 후 데이터베이스 파일에 남겨둘 여유 공간의 최대 비율을 입력합니다. 허용되는 값은 0에서 99 사이입니다.

  4. 확인을 선택합니다.

Transact-SQL 사용

데이터베이스 축소

  1. 데이터베이스 엔진에 연결합니다.

  2. 표준 도구 모음에서 새 쿼리를 선택합니다.

  3. 다음 예제를 복사하여 쿼리 창에 붙여넣고 실행을 선택합니다. 이 예제에서는 DBCC SHRINKDATABASE를 사용하여 UserDB 데이터베이스의 데이터 및 로그 파일 크기를 줄이고 데이터베이스에 10% 여유 공간이 남도록 합니다.

DBCC SHRINKDATABASE (UserDB, 10);
GO

데이터베이스를 축소한 후

파일 축소를 위해 이동되는 데이터는 파일 내의 모든 사용 가능한 위치로 분산될 수 있습니다. 이로 인해 인덱스 조각화가 발생하고 인덱스 범위를 검색하는 쿼리의 성능이 저하될 수 있습니다. 조각화를 제거하려면 축소한 후 파일의 인덱스를 다시 빌드하는 것이 좋습니다. 자세한 내용은 인덱스 다시 빌드를 참조하세요.