在我工作的系统中有很多使用临时表的存储过程和 SQL 脚本。使用这些表后,最好删除它们。
我的许多同事(几乎所有人都比我更有经验)通常会这样做:
TRUNCATE TABLE #mytemp
DROP TABLE #mytemp
Run Code Online (Sandbox Code Playgroud)
我通常DROP TABLE
在我的脚本中使用单个。
在 aTRUNCATE
之前立即执行 a 有什么好的理由DROP
吗?
我有一个 SQL Server 2005 Standard x64,它在过去几个月中遇到了 TempDB DDL 争用问题。服务器将在等待资源 2:1:103 上发生争用(等待类型为 PAGELATCH_EX)。
当服务器负载正常时,该问题似乎偶尔会发生。我一直在监视“破坏临时表”的比率,当我们在 2:1:103 出现 PAGELATCH_EX 问题时,它可以跳到 5,000+。从我读过的内容来看,这个计数器大部分时间应该是 0,但我们的大部分时间似乎都保持在 300-1100 之间。只有当系统上的用户很少时,计数器才会变为 0。
如何缩小导致 tempdb 上 DDL 争用的范围,而不必在大海捞针中寻找针头?