如何清除 SQL Server 中的临时数据库内容?

Com*_*der 2 sql-server tempdb temporary-tables sql-server-2016

正如标题所暗示的,我将清除 SQL Server 中临时数据库的内容。SolarWinds 正在生成严重警报,我想清除 tempdb 工作文件和工作表。

我怎样才能做到这一点?我可以重新启动 MSSQLSERVER 服务以清除内容吗?

Ton*_*kle 12

如果您真的觉得需要清除它,那么是的,重新启动 SQL Server 将清除它。但是,这可能是一个临时解决方案,几天后您将恢复相同的状态。从 SQL Server 的角度来看,重新启动 SQL Server 是清除 tempdb 内容的唯一方法。另一种可能的替代方法是重新启动在 tempdb 中创建对象的应用程序。

鉴于您提供的一些信息,我们不可能知道最佳行动方案是什么。需要考虑的一些事项:

  • 仅仅因为 SolarWinds 说某事是一个问题并不一定意味着它是一个问题。许多监控工具都设置了默认值,这些工具会针对给定服务器上 100% 预期的事情发送“关键”警报。例如,我希望 Dynamics AX SQL Server 触发大多数监控工具的许多默认 tempdb 阈值。如果没有明显的 tempdb 争用并且它没有用完空间,那么可能有没什么重要的。使用 SQL Server 的应用程序是否存在性能问题?有人抱怨性能吗?如果不是,则 SolarWinds 警报未反映现实,可能需要调整阈值。要记住的一件事是,这些应用程序中的许多最初是在存储速度较慢的情况下进行编码和测试的。如果您在 SSD 上有 tempdb,它们可能比 SolarWinds 决定使用什么阈值时可能使用的几个镜像本地 SCSI 磁盘花费更多的时间。

  • 你的 tempdb 大小合适吗?某些应用程序大量使用 tempdb,并且需要比其他应用程序通常使用的多得多。如果 tempdb 空间不足,您可能只需要较大的 tempdb 文件

  • 每个处理器是否有一个 tempdb 数据库文件,最多 8 个?

  • 如果您使用的是 SQL Server 2014 或更早版本,是否启用了跟踪标志 1117 和 1118?如果没有,请研究它们——如果您有一个使用大量 tempdb 的应用程序,您可能想要启用这些(我看到您使用了 sql-server-2016 标记,所以这是为了其他读者的利益) .

  • 应用程序中是否存在导致它“泄漏” tempdb 对象的缺陷?如果 tempdb 表的数量和使用量不断攀升且从未稳定,那么建议对此进行调查。

如果您无法抗拒缩小它的冲动,请使用 TRUNCATEONLY 缩小它。TRUNCATEONLY 可能会缩小很多,或者没有——这取决于最后使用的范围在哪里。如果您将其缩小到指定的大小,它将开始重新组织数据(即对其进行分段),以便将数据从文件末尾移动到中间存在的任何可用空间。为了做到这一点,它需要锁定,并且您的用户/应用程序可能会对性能产生重大影响。而且您永远不知道重新组织这些数据需要多长时间。

如果您有更多信息要添加到有关 SolarWinds 发出警报的确切指标的问题中,将会有所帮助。