安全地移动和创建新的 tempdb 文件

Stu*_*ler 22 sql-server sql-server-2008-r2 tempdb

我想知道两件事:

  • 您如何以最少的停机时间安全地移动 tempdb?
  • 您需要多少个 tempdb 文件?

每个内核是 1 个文件吗?那么四核 = 4 个 tempdb 文件,创建三个新文件?

Tho*_*ger 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
Run Code Online (Sandbox Code Playgroud)

如果要将新文件添加到tempdb,只需执行以下操作(前提是您要将其添加到PRIMARY文件组或创建自己的文件组):

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

要使这些更改生效,您需要重新启动 SQL Server 服务。因此,就最大限度地减少停机时间而言,您受到服务重新启动所需时间的限制。您不必担心移动预先存在的tempdb数据库文件,因为 SQL Server 始终会重新创建文件,并且将在服务启动时创建新的位置/文件。

至于“每个核心 1 个 tempdb 数据文件”,这在很大程度上是一个神话。正确的方法是监视tempdb页面可用空间 (PFS)、全局分配映射 (GAM) 和共享全局分配映射 (SGAM) 页面的文件争用。请参考本文以获取查询 (替代链接)该查询查看sys.dm_os_waiting_tasksDMV 以查看tempdb存在多少文件争用。然后,您需要摆脱这一点,而不仅仅是覆盖tempdb与核心数量相同的文件。这是更可取的方法。


jl0*_*l01 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
    
    Run Code Online (Sandbox Code Playgroud)

    然后重新启动您的 SQL Server 服务 (MSSQLServer)。

  2. tempdb 中的文件数 - 请参阅 Paul Randall 的文章:SQL Server DBA 神话一天:(12/30) tempdb 每个处理器内核应该始终有一个数据文件


Ore*_*reo 5

来自微软的建议

作为一般规则,如果逻辑处理器的数量小于或等于 8,则使用与逻辑处理器相同数量的数据文件。

如果逻辑处理器的数量大于 8,则使用 8 个数据文件,然后如果争用继续,则将数据文件的数量增加 4 的倍数(最多达到逻辑处理器的数量),直到争用减少到可接受的水平或使对工作负载/代码的更改。

移动 TempDB 文件是一个两步过程:

  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];
Run Code Online (Sandbox Code Playgroud)

这将生成您需要运行的 T-SQL 语句,以将文件移动到drive:\folder您想要的新位置。(点击图片放大)

显示 2 行的图像,其中包含有关 TempDB 文件和用于移动它们的 T-SQL 语句的详细信息

运行移动语句后,您可以再次运行上述查询,以检查该Current Location列现在是否显示了新的drive:\folder.

显示 TempDB 文件的新位置的图像

对更改感到满意后,请重新启动 SQL Server 服务