tempdb 데이터베이스 축소

적용 대상:SQL ServerAzure SQL Managed Instance

이 문서에서는 SQL Server에서 데이터베이스를 축소 tempdb 하는 데 사용할 수 있는 다양한 방법을 설명합니다.

다음 방법 중 원하는 것을 사용하여 크기를 tempdb변경할 수 있습니다. 이 문서에서는 처음 세 가지 옵션에 대해 설명합니다. SQL Server Management Studio를 사용하려면 데이터베이스 축소의 지침을 따릅니다.

Method 다시 시작해야 합니까? 추가 정보
ALTER DATABASE 기본 tempdb 파일(tempdevtemplog)의 크기를 완벽하게 제어할 수 있습니다.
DBCC SHRINKDATABASE 없음 데이터베이스 수준에서 작동합니다.
DBCC SHRINKFILE 없음 개별 파일을 축소할 수 있습니다.
SQL Server Management Studio 없음 그래픽 사용자 인터페이스를 통해 데이터베이스 파일을 축소합니다.

설명

기본적으로 tempdb 데이터베이스는 필요에 따라 자동 증가하도록 구성됩니다. 따라서 이 데이터베이스는 시간이 지나면 원하는 크기보다 큰 크기로 예기치 않게 증가할 수 있습니다. 데이터베이스 크기가 클 tempdb 수록 SQL Server의 성능에 부정적인 영향을 주지 않습니다.

SQL Server가 tempdb 시작되면 데이터베이스의 model 복사본을 사용하여 다시 만들어지고 tempdb 마지막으로 구성된 크기로 다시 설정됩니다. 구성된 크기는 옵션 또는 DBCC SHRINKFILEDBCC SHRINKDATABASE 문을 사용하는 MODIFY FILE 것과 같이 ALTER DATABASE 파일 크기 변경 작업을 사용하여 설정한 마지막 명시적 크기입니다. 따라서 다른 값을 사용하거나 큰 tempdb 데이터베이스에 대한 즉각적인 해결을 얻을 필요가 없는 한 SQL Server 서비스의 다음 다시 시작이 크기가 감소할 때까지 기다릴 수 있습니다.

활동이 진행되는 동안 tempdb 축소 tempdb 할 수 있습니다. 그러나 차단, 교착 상태 등과 같은 다른 오류가 발생할 수 있으므로 축소가 완료되지 않도록 방지할 수 있습니다. 따라서 축소가 성공하도록 하려면 서버가 tempdb 단일 사용자 모드이거나 모든 tempdb 활동을 중지한 경우 이 작업을 수행하는 것이 좋습니다.

SQL Server는 트랜잭션 로그에 tempdb 트랜잭션을 롤백하기에 충분한 정보만 기록하지만 데이터베이스 복구 중에는 트랜잭션을 다시 실행하지 않습니다. 이 기능은 .에서 tempdb문의 성능을 INSERT 향상합니다. 또한 SQL Server를 다시 시작할 때마다 다시 생성되므로 트랜잭션을 tempdb 다시 실행하기 위해 정보를 기록할 필요가 없습니다. 따라서 롤아웃하거나 롤백할 트랜잭션이 없습니다.

관리 및 모니터링tempdb에 대한 자세한 내용은 용량 계획tempdb 사용 모니터링을 참조하세요.

ALTER DATABASE 명령 사용

참고 항목

이 명령은 기본 tempdb 논리 파일 tempdevtemplog.에서만 작동합니다. 추가 파일이 추가되면 SQL Server를 tempdb서비스로 다시 시작한 후 축소할 수 있습니다. 모든 tempdb 파일은 시작하는 동안 다시 만들어집니다. 그러나 비어 있으며 제거할 수 있습니다. 추가 tempdb파일을 제거하려면 옵션과 함께 REMOVE FILE 명령을 사용합니다ALTER DATABASE.

이 방법을 사용하려면 SQL Server를 다시 시작해야 합니다.

  1. SQL Server를 중지합니다.

  2. 명령 프롬프트에서 최소 구성 모드에서 인스턴스를 시작합니다. 이렇게 하려면 다음 단계를 수행합니다.

    1. 명령 프롬프트에서 SQL Server가 설치된 폴더로 변경합니다(바꾸기 <VersionNumber><InstanceName> 다음 예제에서).

      cd C:\Program Files\Microsoft SQL Server\MSSQL<VersionNumber>.<InstanceName>\MSSQL\Binn
      
    2. 인스턴스가 SQL Server의 명명된 인스턴스인 경우 다음 명령을 실행합니다(다음 예제에서 바꾸기 <InstanceName> ).

      sqlservr.exe -s <InstanceName> -c -f -mSQLCMD
      
    3. 인스턴스가 SQL Server의 기본 인스턴스인 경우 다음 명령을 실행합니다.

      sqlservr -c -f -mSQLCMD
      

      참고 항목

      -c-f 매개 변수로 인해 SQL Server는 데이터 파일의 크기가 1MB이고 로그 파일의 크기가 tempdb 0.5MB인 최소 구성 모드에서 시작됩니다. 이 매개 변수는 -mSQLCMD sqlcmd 이외의 다른 애플리케이션이 단일 사용자 연결을 인수하지 못하도록 합니다.

  3. sqlcmd를 사용하여 SQL Server에 연결한 다음, 다음 Transact-SQL 명령을 실행합니다. 원하는 크기로 바꿉 <target_size_in_MB> 다.

    ALTER DATABASE tempdb MODIFY FILE
    (NAME = 'tempdev', SIZE = <target_size_in_MB>);
    
    ALTER DATABASE tempdb MODIFY FILE
    (NAME = 'templog', SIZE = <target_size_in_MB>);
    
  4. SQL Server를 중지합니다. 이렇게 하려면 명령 프롬프트 창에서 누르 Ctrl+C 고 SQL Server를 서비스로 다시 시작한 다음 파일의 tempdb.mdftemplog.ldf 크기와 크기를 확인합니다.

DBCC SHRINKDATABASE 명령 사용

DBCC SHRINKDATABASE 는 매개 변수 target_percent를 수신합니다. 데이터베이스가 축소된 후 데이터베이스 파일에 남아 있는 여유 공간의 원하는 비율입니다. 사용하는 DBCC SHRINKDATABASE경우 SQL Server를 다시 시작해야 할 수 있습니다.

  1. 저장 프로시저를 사용하여 sp_spaceused 현재 사용되는 tempdb 공간을 결정합니다. 그런 다음 매개 변수로 사용할 여유 공간의 백분율을 계산합니다 DBCC SHRINKDATABASE. 이 계산은 원하는 데이터베이스 크기를 기반으로 합니다.

    참고 항목

    경우에 따라 사용되는 공간을 다시 계산하고 업데이트된 보고서를 가져오기 위해 실행 sp_spaceused @updateusage = true 해야 할 수 있습니다. 자세한 내용은 sp_spaceused(Transact-SQL)를 참조 하세요.

    다음 예제를 참조하세요.

    tempdb 1024MB인 기본 데이터 파일(tempdb.mdf)과 360MB인 로그 파일(tempdb.ldf)의 두 파일이 있다고 가정합니다. sp_spaceused 기본 데이터 파일에 600MB의 데이터가 포함되어 있다고 보고한다고 가정합니다. 또한 기본 데이터 파일을 800MB로 축소한다고 가정합니다. 축소 후 남은 여유 공간의 원하는 백분율을 계산합니다. 800MB - 600MB = 200MB. 이제 200MB를 800MB = 25%로 target_percent나눕니다. 따라서 트랜잭션 로그 파일은 축소되어 데이터베이스가 축소된 후 25% 또는 200MB의 공간을 확보합니다.

  2. SQL Server Management Studio, Azure Data Studio 또는 sqlcmd를 사용하여 SQL Server에 연결한 다음, 다음 Transact-SQL 명령을 실행합니다. 원하는 백분율로 바꿉 <target_percent> 다.

    DBCC SHRINKDATABASE (tempdb, '<target_percent>');
    

에 대한 명령에는 DBCC SHRINKDATABASE 제한이 있습니다 tempdb. 데이터 및 로그 파일의 대상 크기는 데이터베이스를 만들 때 지정한 크기보다 작거나 옵션을 사용하는 MODIFY FILE 것과 같은 ALTER DATABASE 파일 크기 변경 작업을 사용하여 명시적으로 설정한 마지막 크기보다 작을 수 없습니다. 또 다른 제한 DBCC SHRINKDATABASE 사항은 매개 변수의 target_percentage 계산과 사용되는 현재 공간에 대한 종속성입니다.

DBCC SHRINKFILE 명령 사용

명령을 DBCC SHRINKFILE 사용하여 개별 tempdb 파일을 축소합니다. DBCC SHRINKFILE 는 동일한 데이터베이스에 속한 다른 파일에 영향을 주지 않고 단일 데이터베이스 파일에서 사용할 수 있기 때문에 DBCC SHRINKDATABASE 보다 더 많은 유연성을 제공합니다. DBCC SHRINKFILE 는 매개 변수를 target_size 수신합니다. 데이터베이스 파일에 대해 원하는 최종 크기입니다.

  1. 기본 데이터 파일(), 로그 파일(tempdb.mdf) 및 추가 파일에 대해 원하는 크기를 결정합니다tempdb.templog.ldf 파일에 사용되는 공간이 원하는 대상 크기보다 작거나 같은지 확인합니다.

  2. SQL Server Management Studio, Azure Data Studio 또는 sqlcmd를 사용하여 SQL Server에 연결한 다음 축소하려는 특정 데이터베이스 파일에 대해 다음 Transact-SQL 명령을 실행합니다. 원하는 크기로 바꿉 <target_size_in_MB> 다.

    USE tempdb;
    GO
    
    -- This command shrinks the primary data file
    DBCC SHRINKFILE (tempdev, '<target_size_in_MB>');
    GO
    
    -- This command shrinks the log file, examine the last paragraph.
    DBCC SHRINKFILE (templog, '<target_size_in_MB>');
    GO
    

DBCC SHRINKFILE 장점은 파일의 크기를 원래 크기보다 작은 크기로 줄일 수 있다는 것입니다. 데이터 또는 로그 파일에 대해 실행할 DBCC SHRINKFILE 수 있습니다. 데이터베이스 크기를 데이터베이스 크기보다 model 작게 만들 수는 없습니다.

축소 작업을 실행할 때 오류 8909

사용 중인 경우 tempdb 또는 DBCC SHRINKFILE 명령을 사용하여 DBCC SHRINKDATABASE 축소하려는 경우 사용 중인 SQL Server 버전에 따라 다음과 유사한 메시지를 받을 수 있습니다.

Server: Msg 8909, Level 16, State 1, Line 1 Table error: Object ID 0, index ID -1, partition ID 0, alloc unit ID 0 (type Unknown), page ID (6:8040) contains an incorrect page ID in its page header. The PageId in the page header = (0:0).

이 오류는 .의 tempdb실제 손상을 나타내지 않습니다. 그러나 오류 8909와 같은 물리적 데이터 손상 오류에 대한 다른 이유가 있을 수 있으며 이러한 원인에는 I/O 하위 시스템 문제가 포함됩니다. 따라서 축소 작업 외부에서 오류가 발생하는 경우 더 많은 조사를 수행해야 합니다.

8909 메시지가 애플리케이션 또는 축소 작업을 실행하는 사용자에게 반환되지만 축소 작업은 실패하지 않습니다.

참고 항목

다음 단계