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


21

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

  • どのようにして、最小のダウンタイムで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データファイル」については、それはほとんど神話です。正しいアプローチはtempdb、Page Free Space(PFS)、Global Allocation Map(GAM)、およびShared Global Allocation Map(SGAM)ページのファイル競合を監視することです。この記事を 参照して、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の神話1日:(12/30)tempdbには、プロセッサコアごとに常に1つのデータファイルが必要です


4

マイクロソフトのアドバイスから:

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

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

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

  1. SQL 新しいTempDBファイルの移動先を指定します(これにはダウンタイムはありません)
  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];

これにより、ファイルを目的のファイルに移動するために実行する必要があるT-SQLステートメントが生成されdrive:\folderます。(画像をクリックすると大きくなります)

TempDBファイルとそれらを移動するT-SQLステートメントの詳細を含む2行を示す画像

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

TempDBファイルの新しい場所を示す画像

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.