我们真的应该为每个 SQL 实例打开跟踪标志 1118 吗?

Jam*_*ins 5 sql-server tempdb trace-flags

建议每个 SQL 实例都打开 TF 1118

Paul 对使用跟踪标志 1118 的建议是什么?从 SQL Server 2000 开始,每个人都应该在 SQL Server 的所有实例上打开它。打开它没有任何缺点。 保罗·兰德尔

它记录在KB 2154845 中,虽然它确实影响所有数据库,但影响最大的是 tempdb

这意味着实例上每个数据库中的每个新分配的对象都会获得自己的私有 64KB 数据。Tempdb 通常是创建大多数对象的地方,因此它在那里发挥了最大的作用。 肯德拉·利特尔

我环顾四周,没有发现任何人反对使用它。那么,我们应该在创建新实例时将其作为我们流程的一部分,并在机会出现时将其追溯添加到现有 SQL 实例中吗?

我在 2014 年使用 SQL 2000,还没有在 2016 年上线。我们按照说明为每个处理器使用 1 个 tempdb,最多 8 个。

Aar*_*and 9

对于 SQL Server 2000?2014年

我大体上同意 Paul Randal 的观点,即您可以随时打开此功能,但我确实有点犹豫要说它应该始终打开,并且无论您观察到什么,都应将其保持打开状态(无论是否经过充分测试) )。

人们可能对 tempdb 配置设置不当,例如文件不足、文件太小、文件大小不等、增长设置不当、未启用即时文件初始化以及临时表未缓存和重用的不良编码症状(请参阅此处在这里)。在这种情况下,对于完美的风暴工作负载,可以想象跟踪标志实际上会导致更差的整体性能。考虑一下这些设置不是最佳的情况,并且您有大量用户都试图创建他们自己的临时表的非缓存副本,并且他们都使用自己的专用范围而不是共享它们。可能存在某种程度,即使我不能随意生成它,专用区的开销超过分配争用节省。

仅仅因为 Paul 没有看到秤在某个阈值处倾斜的情况并不意味着这是不可能的,只是它不太可能/不常见。

您可能可以通过遵循所有其他最佳实践来避免这种情况,因为我怀疑这确实需要一场完美的风暴,我只是觉得不够坚强,无法始终无一例外地说出来。

对于 SQL Server 2016

在 SQL Server 2016 中,统一范围分配是默认行为 - 请参阅Bob Dorr 关于它的“它只是运行得更快”的帖子。除此之外,上面的许多相同的事情都是正确的。

您不能为 tempdb 关闭此功能;因此,实际上,跟踪标志 1118 在 2016 年始终处于开启状态,并且是永久性的。因此,我的建议是确保 tempdb 在 TF 1118 下在当前实例和当前工作负载下有效工作,以避免升级时出现任何意外(此时您将无法再选择将其关闭)。

如果要在 2016 年为用户数据库关闭它,请使用ALTER DATABASE

ALTER DATABASE MyDatabase SET MIXED_PAGE_ALLOCATION ON;
Run Code Online (Sandbox Code Playgroud)