Answers:
要移动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
页面可用空间(PFS),全局分配图(GAM)和共享全局分配图(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神话:(12/30)tempdb每个处理器核心始终应有一个数据文件
根据微软的建议:
通常,如果逻辑处理器的数量小于或等于8,请使用与逻辑处理器相同数量的数据文件。
如果逻辑处理器的数量大于8,则使用8个数据文件,然后如果争用继续进行,请将数据文件的数量增加4的倍数(最多为逻辑处理器的数量),直到争用减少到可接受的水平或更改工作负载/代码。
移动TempDB文件是一个两步过程:
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
列现在是否显示new drive:\folder
。
对更改满意后,请重新启动SQL Server服务。