데이터베이스 축소Shrink a Database

이 항목 적용 대상: 예SQL Server예Azure SQL 데이터베이스없습니다Azure SQL 데이터 웨어하우스 없습니다 병렬 데이터 웨어하우스THIS TOPIC APPLIES TO: yesSQL ServeryesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse 이 항목에서는 SQL Server Management StudioSQL Server Management Studio 또는 Transact-SQLTransact-SQLSQL Server 2017SQL Server 2017의 개체를 사용하여 데이터베이스를 축소하는 방법에 대해 설명합니다. This topic describes how to shrink a database by using Object in SQL Server 2017SQL Server 2017 by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL.

파일 끝에 있는 데이터 페이지를 파일 앞의 사용되지 않은 공간으로 이동하여 데이터 파일을 축소하면 공간이 복구됩니다.Shrinking data files recovers space by moving pages of data from the end of the file to unoccupied space closer to the front of the file. 파일 끝에 사용 가능한 공간을 충분히 확보한 다음 파일 끝에 있는 데이터 페이지를 할당 해제하고 파일 시스템에 반환할 수 있습니다.When enough free space is created at the end of the file, data pages at end of the file can be deallocated and returned to the file system.

항목 내용In This Topic

시작하기 전에Before You Begin

제한 사항Limitations and Restrictions

  • 데이터베이스를 최소 데이터베이스 크기보다 작게 축소할 수는 없습니다.The database cannot be made smaller than the minimum size of the database. 최소 크기는 데이터베이스를 처음 만들 때 지정된 크기나 DBCC SHRINKFILE과 같은 파일 크기 변경 작업을 사용하여 명시적으로 설정한 최종 크기입니다.The minimum size is the size specified when the database was originally created, or the last explicit size set by using a file-size-changing operation, such as DBCC SHRINKFILE. 예를 들어 원래 10MB로 생성된 데이터베이스가 100MB까지 증가한 경우 포함된 모든 데이터를 삭제하더라도 데이터베이스를 10MB 이하로는 축소할 수 없습니다.For example, if a database was originally created with a size of 10 MB and grew to 100 MB, the smallest size the database could be reduced to is 10 MB, even if all the data in the database has been deleted.

  • 데이터베이스가 백업되는 동안에는 데이터베이스를 축소할 수 없습니다.You cannot shrink a database while the database is being backed up. 반대로 데이터베이스에 대한 축소 작업이 처리되는 동안에는 데이터베이스를 백업할 수 없습니다.Conversely, you cannot backup a database while a shrink operation on the database is in process.

  • xVelocity 메모리 최적화 Columnstore 인덱스가 발생할 경우 DBCC SHRINKDATABASE는 실패합니다.DBCC SHRINKDATABASE will fail when it encounters an xVelocity memory optimized columnstore index. Columnstore 인덱스가 발생하기 전에 완료된 작업은 성공하므로 데이터베이스 크기가 작아질 수 있습니다.Work completed before encountering the columnstore index will succeed so the database might be smaller. DBCC SHRINKDATABASE를 완료하려면 DBCC SHRINKDATABASE를 실행하기 전에 모든 columnstore 인덱스를 사용하지 않도록 설정한 다음 columnstore 인덱스를 다시 작성합니다.To complete DBCC SHRINKDATABASE, disable all columnstore indexes before executing DBCC SHRINKDATABASE, and then rebuild the columnstore indexes.

권장 사항Recommendations

  • 현재 데이터베이스에 있는 여유(할당되지 않은) 공간의 양을 보려면To view the current amount of free (unallocated) space in the database. 자세한 내용은 Display Data and Log Space Information for a Database를 참조하세요.For more information, see Display Data and Log Space Information for a Database

  • 데이터베이스를 축소할 때는 다음을 고려하세요.Consider the following information when you plan to shrink a database:

    • 축소 작업은 테이블 잘라내기 또는 테이블 삭제 작업과 같이 사용되지 않는 공간이 많이 생기는 작업을 수행한 후에 가장 효과적입니다.A shrink operation is most effective after an operation that creates lots of unused space, such as a truncate table or a drop table operation.

    • 대부분의 데이터베이스에는 정기적인 일상 작업에 사용 가능한 일정 여유 공간이 필요합니다.Most databases require some free space to be available for regular day-to-day operations. 데이터베이스를 반복해서 축소했지만 데이터베이스 크기가 다시 늘어나는 경우 일반 작업을 위해 축소된 공간이 필요한 것입니다.If you shrink a database repeatedly and notice that the database size grows again, this indicates that the space that was shrunk is required for regular operations. 이러한 경우 데이터베이스를 반복해서 축소하는 것은 불필요한 작업입니다.In these cases, repeatedly shrinking the database is a wasted operation.

    • 축소 작업은 데이터베이스 인덱스의 조각화 상태를 보존하지 않으며 일반적으로 조각화 정도를 어느 정도까지 늘리기도 합니다.A shrink operation does not preserve the fragmentation state of indexes in the database, and generally increases fragmentation to a degree. 이것은 데이터베이스를 반복해서 축소하지 않아야 하는 또 다른 이유입니다.This is another reason not to repeatedly shrink the database.

    • 특정 요구 사항이 없을 경우 AUTO_SHRINK 데이터베이스 옵션을 ON으로 설정하지 마세요.Unless you have a specific requirement, do not set the AUTO_SHRINK database option to ON.



sysadmin 고정 서버 역할의 멤버 또는 db_owner 고정 데이터베이스 역할의 멤버여야 합니다.Requires membership in the sysadmin fixed server role or the db_owner fixed database role.

SQL Server Management Studio 사용Using SQL Server Management Studio

데이터베이스를 축소하려면To shrink a database

  1. 개체 탐색기에서 SQL Server 데이터베이스 엔진SQL Server Database Engine의 인스턴스에 연결한 다음 해당 인스턴스를 확장합니다.In Object Explorer, connect to an instance of the SQL Server 데이터베이스 엔진SQL Server Database Engine, and then expand that instance.

  2. 데이터베이스를 확장한 다음 축소할 데이터베이스를 마우스 오른쪽 단추로 클릭합니다.Expand Databases, and then right-click the database that you want to shrink.

  3. 태스크, 축소를 차례로 가리킨 다음 데이터베이스를 클릭합니다.Point to Tasks, point to Shrink, and then click Database.

    데이터베이스 백업Database
    선택한 데이터베이스의 이름을 표시합니다.Displays the name of the selected database.

    현재 할당된 공간Current allocated space
    선택한 데이터베이스의 총 사용 공간 및 사용되지 않은 공간을 표시합니다.Displays the total used and unused space for the selected database.

    사용 가능한 공간Available free space
    선택한 데이터베이스의 로그 및 데이터 파일의 총 사용 가능한 공간을 표시합니다.Displays the sum of free space in the log and data files of the selected database.

    사용하지 않은 공간을 해제하기 전에 파일을 다시 구성합니다.Reorganize files before releasing unused space
    이 옵션을 선택하는 것은 목표 백분율 옵션을 지정하여 DBCC SHRINKDATABASE를 실행하는 것과 같습니다.Selecting this option is equivalent to executing DBCC SHRINKDATABASE specifying a target percent option. 또한 이 옵션의 선택을 취소하는 것은 TRUNCATEONLY 옵션을 사용하여 DBCC SHRINKDATABASE를 실행하는 것과 같습니다.Clearing this option is equivalent to executing DBCC SHRINKDATABASE with TRUNCATEONLY option. 기본적으로 대화 상자를 열 때 이 옵션은 선택되어 있지 않습니다.By default, this option is not selected when the dialog is opened. 이 옵션을 선택하면 목표 백분율 옵션을 지정해야 합니다.If this option is selected, the user must specify a target percent option.

    축소 후 파일에 남는 최대 여유 공간Maximum free space in files after shrinking
    데이터베이스를 축소한 후 데이터베이스 파일에 남겨둘 여유 공간의 최대 비율을 입력합니다.Enter the maximum percentage of free space to be left in the database files after the database has been shrunk. 허용되는 값은 0에서 99까지입니다.Permissible values are between 0 and 99.

  4. 확인을 클릭합니다.Click OK.

Transact-SQL 사용Using Transact-SQL

데이터베이스를 축소하려면To shrink a database

  1. 데이터베이스 엔진Database Engine에 연결합니다.Connect to the 데이터베이스 엔진Database Engine.

  2. 표준 도구 모음에서 새 쿼리를 클릭합니다.From the Standard bar, click New Query.

  3. 다음 예를 복사하여 쿼리 창에 붙여 넣고 실행을 클릭합니다.Copy and paste the following example into the query window and click Execute. 이 예에서는 DBCC SHRINKDATABASE 를 사용하여 UserDB 데이터베이스의 데이터 및 로그 파일 크기를 줄이고 데이터베이스에 10 의 여유 공간이 남도록 합니다.This example uses DBCC SHRINKDATABASE to decreases the size of the data and log files in the UserDB database and to allow for 10 percent free space in the database.


후속 작업: 데이터베이스를 축소한 후Follow Up: After you shrink a database

파일 축소를 위해 이동되는 데이터는 파일 내의 모든 사용 가능한 위치로 분산될 수 있습니다.Data that is moved to shrink a file can be scattered to any available location in the file. 이로 인해 인덱스 조각화가 발생하여 인덱스 범위를 검색하는 쿼리 성능이 저하될 수 있습니다.This causes index fragmentation and can slow the performance of queries that search a range of the index. 조각화를 방지하려면 축소 후 파일에 대한 인덱스를 다시 작성하는 것이 좋습니다.To eliminate the fragmentation, consider rebuilding the indexes on the file after shrinking.

참고 항목See Also

파일 축소 Shrink a File
sys.databases(Transact-SQL) sys.databases (Transact-SQL)
sys.database_files(Transact-SQL) sys.database_files (Transact-SQL)
DBCC(Transact-SQL) DBCC (Transact-SQL)
데이터베이스 파일 및 파일 그룹Database Files and Filegroups