TempDB中的物理表会自动删除

时间:2019-06-12 06:45:08

标签: sql-server database-administration tempdb

在我们的解决方案中,我们在“ tempDB”中为活动创建了一些物理表。但是最近我们面临一个问题,即这些物理表将被自动删除。我们想知道此问题背后的可能原因/情况。

编辑: 是的,我认为不建议在“ tempdb”中创建物理表,但在这里我只是在寻找删除它的可能原因。

3 个答案:

答案 0 :(得分:0)

哇-这确实很有趣。我很好奇你为什么这样实现。

我认为该策略最初对您有效,但现在不行吗? SQL Server将把tempDB增大到最佳大小,然后从中删除数据,但不收缩它。在任何给定的时间点,tempDB可能大部分都是空的。

也许您的tempDB现在正在满负荷运行,并且需要付出一些努力。负载可能发生一些变化-正在运行的查询类型等意味着您的表已被擦除。尝试增加它的大小或在另一个磁盘上创建另一个tempDB。

答案 1 :(得分:0)

MS SQL中有两种类型的临时表-local and global

删除策略如下:

  • 本地临时表(带有#前缀):用户从SQL Server实例断开连接后,这些表将被删除
  • 全局临时表(带有##前缀):当所有引用该表的用户从SQL Server实例断开连接时,这些表将被删除

tempDB数据库表也将在启动时清除。

tempDB中存储着其他类型的表。其中一个称为表变量(前缀为@),另一个称为 persisted 临时表(创建时不使用任何前缀)。

仅在重新启动SQL服务时,才会删除持久的临时表。

答案 2 :(得分:0)

来自docs

  每次启动SQL Server时都会重新创建

tempdb ,以便   系统始终以数据库的干净副本开始。临时   断开连接后,表和存储过程将自动删除,   系统关闭时,没有连接处于活动状态。因此,    tempdb 中永远不会从一个SQL会话中保存任何内容   服务器到另一个。不允许进行备份和还原操作   tempdb。

这意味着在重新启动服务后,不仅物理表而且其他对象(如触发器,权限,视图等)也将消失。这就是为什么您不应该对用户对象使用tempdb

您可以在自己的数据库中创建一个架构,并保留一个SQL Agent Job,该应用程序偶尔会一次删除其所有表,因此您可以模仿一个“临时”物理表空间来解决该问题。