私が知りたい2つのこと:
- どのようにして、最小のダウンタイムでtempdbを安全に移動しますか?
- いくつのtempdbファイルが必要ですか?
コアごとに1ファイルですか?クアッドコア= 4つのtempdbファイルで、3つの新しいファイルを作成しますか?
私が知りたい2つのこと:
コアごとに1ファイルですか?クアッドコア= 4つのtempdbファイルで、3つの新しいファイルを作成しますか?
回答:
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サービスを再起動する必要があります。したがって、ダウンタイムを最小限に抑える限り、サービスの再起動にかかる時間に制限されます。tempdb
SQL 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
コアがあるのと同じ量のファイルで単にブランケットするのではなく、これを実行する必要があります。それはより賢明なアプローチです。
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)を再起動します。
tempdb内のファイルの数-Paul Randallの記事を参照してください:SQL Server DBAの神話1日:(12/30)tempdbには、プロセッサコアごとに常に1つのデータファイルが必要です
原則として、論理プロセッサの数が8以下の場合、論理プロセッサと同じ数のデータファイルを使用します。
論理プロセッサの数が8を超える場合、8つのデータファイルを使用し、競合が続く場合は、競合が許容レベルに下がるまで、または論理的なプロセッサの数まで4の倍数(論理プロセッサの数まで)ワークロード/コードの変更。
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
ます。(画像をクリックすると大きくなります)
移動ステートメントを実行したら、上記のクエリを再度実行して、Current Location
列に新しいが表示されていることを確認できdrive:\folder
ます。
変更に満足したら、SQL Serverサービスを再起動します。