Stu*_*ler 22 sql-server sql-server-2008-r2 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_tasks
DMV 以查看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
Run Code Online (Sandbox Code Playgroud)
然后重新启动您的 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];
Run Code Online (Sandbox Code Playgroud)
这将生成您需要运行的 T-SQL 语句,以将文件移动到drive:\folder
您想要的新位置。(点击图片放大)
运行移动语句后,您可以再次运行上述查询,以检查该Current Location
列现在是否显示了新的drive:\folder
.
对更改感到满意后,请重新启动 SQL Server 服务。