Tempdb 添加文件需要重启

4 performance sql-server sql-server-2012 tempdb performance-tuning

添加 Tempdb 文件是否需要重新启动?我们想在同一个驱动器上添加文件,不删除和不修改。我们在 Dev 和 QA 环境中进行了测试,不需要重启。但是对于生产,我想确保一切正常。有些是陈述条件,并不总是必要的,有时是必要的,我正在阅读以下资源:

ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdev2', FILENAME = N'G:\tempdb2.ndf' , SIZE = 12288000KB , MAXSIZE = UNLIMITED, FILEGROWTH = 0 )
GO
ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdev3', FILENAME = N'G:\tempdb3.ndf' , SIZE = 12288000KB , MAXSIZE = UNLIMITED, FILEGROWTH = 0 
Run Code Online (Sandbox Code Playgroud)

您是否需要中断才能添加 tempdb 文件?Brent Ozar https://www.brentozar.com/blitz/tempdb-data-files/ “从技术上讲,并非总是如此。但实际上,是的。如果必须缩小文件,在使用 SQL Server 时这非常困难,并且我们已经看到,在添加文件后重新启动 SQL Server 之前,防病毒/文件控制工具才起作用。”

http://jackworthen.com/2017/08/24/adding-additional-data-files-to-the-tempdb-database-in-sql-server/ “一旦创建了附加文件,并不总是需要执行服务重启。但是,在许多生产环境中,如果不先重启服务,就不可能简单地修改现有 TempDB 数据文件 (tempdev) 的文件大小。”

以下资源表示无需重启:https : //www.codykonior.com/2015/08/10/modifying-tempdb-database-files-without-a-restart/ http://jackworthen.com/2017/08 /24/adding-additional-data-files-to-the-tempdb-database-in-sql-server/

Jon*_*ite 10

添加- 无需停机。尽管正如 Microsoft 的 Sean 指出的那样,SQL 更喜欢使用填充较低的文件。如果您要从 1 个数据文件开始并添加更多数据,那么 SQL 将使用新的数据文件一段时间,但您的性能不会比只有一个文件差。但是,如果您已经有 2+ 个并再添加一个,那么它会在新的一个上产生热点并降低性能。

SHRINK - 可能需要停机,具体取决于负载。文件的尾部需要为空,这在繁忙的服务器中可能不会发生。

GROW - 不需要中断,尽管您可能更愿意采取一个来避免性能损失。即时文件初始化将缓解这种情况。正如 Aaron 指出的那样,它只会减轻数据文件的影响,但由于您不会添加多个日志文件(无用)

REMOVE - 可能需要停机(必须先缩小/清空)

MOVE - 需要中断,因为您需要重新启动 SQL 以使其开始使用新位置中的文件。

编辑- 添加了有关 HotSpotting 的详细信息。

当 SQL Server 有多个 TempDB 数据文件时,它会查看它们并选择数据量最少的一个来使用(一种负载平衡)。因此,在您有两个或更多现有数据文件并添加一个新数据文件的情况下,SQL 将观察到您刚刚添加的数据文件的填充最低,并将几乎完全使用该文件,直到它达到与其他文件相同的级别。这将否定拥有多个 tempdb 文件的优势,因为所有活动都将集中在一个上。基本上,您将看到您刚刚添加的文件的 tempdb 争用(tempdb 上的 Pagelatch),直到它达到平衡。

如果您有 1 个文件并向其中添加 1 个或更多,那么这种情况仍然会发生(SQL 将更喜欢使用填充最低的文件),但是当您从一个存在争用的文件开始时,您将看不到任何下降性能,但在文件全部达到平衡之前,您不会看到性能有任何提升。

  • 我会在“添加”部分添加一个附录:“添加:不,但你很可能会不平衡,所以你会成为热点,这可能会让事情*更糟*。” (5认同)