새 tempdb 파일을 안전하게 이동 및 생성


21

내가 알고 싶은 두 가지 :

  • 가동 중지 시간을 최소화하면서 tempdb를 어떻게 안전하게 이동합니까?
  • 얼마나 많은 tempdb 파일이 필요합니까?

코어 당 1 개의 파일입니까? 쿼드 코어 = 4 개의 tempdb 파일로 3 개의 새로운 파일을 생성합니까?

답변:


22

tempdb파일 을 이동하려면 다음을 수행하면됩니다.

alter database tempdb
modify file
(
    name = tempdev,
    filename = 'C:\YourNewTempdbDir\tempdb.mdf'
)
go

alter database tempdb
modify file
(
    name = templog,
    filename = 'C:\YourNewTempdbDir\templog.ldf'
)
go

에 새 파일을 추가 tempdb하려면 다음을 수행하면됩니다 ( PRIMARY파일 그룹에 파일 을 추가 하거나 직접 생성 하려는 경우 ).

alter database tempdb
add file
(
    name = tempdb2,
    filename = 'C:\YourNewTempdbDir\Tempdb2.ndf'
)
go

이러한 변경 사항을 적용하려면 SQL Server 서비스를 다시 시작해야합니다. 지금 까지 다운 타임을 최소화하는가는대로, 당신은 서비스를 다시 시작 될 때까지의 시간으로 제한된다 . tempdbSQL Server는 항상 파일을 다시 만들고 서비스를 시작할 때 새 위치 / 파일이 만들어 지므로 기존 데이터베이스 파일 이동에 대해 걱정할 필요가 없습니다 .

"코어 당 1 개의 tempdb 데이터 파일"에 대해서는 대부분 신화입니다. 올바른 방법은 tempdbPFS (Page Free Space), GAM (Global Allocation Map) 및 SGAM (Shared Global Allocation Map) 페이지에 대한 파일 경합 을 모니터링 하는 것입니다. 이 기사를 참조 하여 DMV를 통해 조회하는 파일 (대체 링크)sys.dm_os_waiting_tasks 을 확인하여 tempdb파일 경합 정도를 확인하십시오 . 그런 다음 tempdb코어가있는 것과 동일한 양의 파일로 담요 를 채우는 대신이 작업을 수행해야합니다 . 더 바람직한 접근 방식입니다.


8
  1. tempdb를 이동하려면 다음을 실행하십시오.

    ALTER DATABASE tempdb 
    MODIFY FILE ( name=tempdev, filename='D:\Newpath\tempdb.mdf') 
    GO
    ALTER DATABASE tempdb 
    MODIFY FILE ( name=templog, filename='D:\Newpath\templog.ldf') 
    GO

    그런 다음 SQL Server 서비스 (MSSQLServer)를 다시 시작하십시오.

  2. tempdb의 파일 수-Paul Randall의 기사 : 매일 SQL Server DBA 신화 참조 : (12/30) tempdb는 항상 프로세서 코어 당 하나의 데이터 파일을 가져야합니다.


4

에서 마이크로 소프트의 조언 :

일반적으로 논리 프로세서의 수가 8보다 작거나 같은 경우 논리 프로세서와 동일한 수의 데이터 파일을 사용하십시오.

논리 프로세서 수가 8보다 큰 경우 8 개의 데이터 파일을 사용한 다음 경합이 계속되면 경합이 허용 가능한 수준으로 줄어들거나 만들 때까지 데이터 파일 수를 4의 배수 (논리 프로세서 수까지)만큼 늘리십시오. 작업량 / 코드 변경.

TempDB 파일 이동은 2 단계 프로세스입니다.

  1. 새 TempDB 파일을 어디로 옮길 것인지 SQL 알립니다 (다운 타임은 없습니다)
  2. SQL Server변경 사항을 적용 하려면 서비스를 다시 시작하십시오 ( 필요한 최소 다운 타임입니다 ).

SQL에 새 TempDB 파일을 작성할 위치를 알려면 다음을 사용할 수 있습니다.

DECLARE @newDriveAndFolder VARCHAR(8000);

SET @newDriveAndFolder = 'Z:\YourTempDBfolder';

SELECT [name] AS [Logical Name]
    ,physical_name AS [Current Location]
    ,state_desc AS [Status]
    ,size / 128 AS [Size(MB)] --Number of 8KB pages / 128 = MB
    ,'ALTER DATABASE tempdb MODIFY FILE (NAME = ' + QUOTENAME(f.[name])
    + CHAR(9) /* Tab */
    + ',FILENAME = ''' + @newDriveAndFolder + CHAR(92) /* Backslash */ + f.[name]
    + CASE WHEN f.[type] = 1 /* Log */ THEN '.ldf' ELSE '.mdf' END  + ''''
    + ');'
    AS [Create new TempDB files]
FROM sys.master_files f
WHERE f.database_id = DB_ID(N'tempdb')
ORDER BY f.[type];

그러면 파일을 drive:\folder원하는 새 파일로 이동하기 위해 실행해야하는 T-SQL 문이 생성됩니다 . (이미지를 클릭하면 크게됩니다)

TempDB 파일 및 T-SQL 문에 대한 세부 사항이있는 2 개의 행을 보여주는 이미지

이동 명령문을 실행하면 위의 쿼리를 다시 실행하여 Current Location열에 새 항목이 표시되는지 확인할 수 있습니다 drive:\folder.

TempDB 파일의 새로운 위치를 보여주는 이미지

변경 내용에 만족 하면 SQL Server 서비스를 다시 시작하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.