web-dev-qa-db-ja.com

新しいtempdbファイルを安全に移動して作成する

私が知りたい2つのこと:

  • 最小限のダウンタイムでtempdbを安全に移動するにはどうすればよいですか?
  • tempdbファイルはいくつ必要ですか。

コアごとに1ファイルですか?したがって、クアッドコア= 4つのtempdbファイルで、3つの新しいファイルを作成しますか?

22
Stuart Blackler

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サービスを再起動する必要があります。したがって、ダウンタイムを最小限に抑える限り、サービスの再起動にかかる時間に制限されます。 SQL Serverは常にファイルを再作成し、サービスの起動時に新しい場所/ファイルが作成されるため、既存のtempdbデータベースファイルの移動について心配する必要はありません。

「コアごとに1つのtempdbデータファイル」については、それは主に神話です。正しい方法は、ページ空き領域(PFS)、グローバルアロケーションマップ(GAM)、および共有グローバルアロケーションマップ(SGAM)ページのtempdbファイル競合を監視することです。参照してください クエリを取得するにはこの記事(代替リンク)sys.dm_os_waiting_tasks DMVを使用して、tempdbファイルの競合の程度を確認します。次に、コアがあるのと同じ量のファイルでtempdbを単にブランケットするのではなく、これをやめる必要があります。それはより賢明なアプローチです。

22
Thomas Stringer
  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の記事を参照してください: 1日あたりのSQL Server DBAの神話:(12/30)tempdbには、プロセッサコアごとに常に1つのデータファイルが必要です

8
jl01

Microsoftのアドバイス から:

原則として、論理プロセッサの数が8以下の場合は、論理プロセッサと同じ数のデータファイルを使用します。

論理プロセッサの数が8を超える場合は、8つのデータファイルを使用し、競合が続く場合は、競合が許容レベルに減少するか、競合がなくなるまで、データファイルの数を4の倍数(論理プロセッサの数まで)増やします。ワークロード/コードの変更。

TempDBファイルの移動は2段階のプロセスです。

  1. SQLに通知where新しいTempDBファイルの移動先(これにはダウンタイムはありません)
  2. Restart変更を有効にするためのSQL Serverサービス(これは最小ダウンタイム必要です)

新しいTempDBファイルを作成する場所をSQLに指示するには、次を使用できます。

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ステートメントが生成されます。 (画像をクリックすると大きくなります)

Image showing 2 rows with details on TempDB files and T-SQL statements to move them

移動ステートメントを実行したら、上記のクエリを再度実行して、Current Location列に新しいdrive:\folderが表示されていることを確認できます。

Image showing TempDB files' new locations

変更に満足したら、SQL Serverサービスを再起動します。

5
Oreo