我的问题类似于这里提出的一个问题:服务器流氓临时表
由于我没有足够的观点来评论,而且答案也没有解决我的担忧,所以我只能在这里提出一个新的问题。
使用Visual 2017中的SQL搜索工具,我可以看到表中的列,并确认名为#BC835DE的临时表确实来自与存储过程相关的表变量。我重新运行这个程序,没有任何问题,但这张表仍然挂着。我怎样才能放下这样的桌子,清理tempdb呢?谢谢。
PS。根据SQL搜索工具的结果,似乎不是所有名为#BBC835DE的表都来自表变量,有些表也来自存储过程中声明的游标。
发布于 2017-08-03 14:10:51
我相信这与计划缓存有关。只是在我那头做了个小测试,我就可以复制了。
要从tempdb DBCC FREEPROCCACHE工作中删除表,显然要针对存储过程的计划句柄。
您可以这样做,但是它会再次出现,并且始终释放缓存通常不是最好的主意。
如果您担心它占用空间,您可以运行我为一个应该工作的监视工具编写的查询。在我的测试中,它总是在SP完成后显示0KB。这让我相信,它只是将表的外壳保存在那里,以供内部使用。所以对我来说是无害的。
USE tempdb;
WITH KB
AS (SELECT t.name,
SUM(a.used_pages) * 8 AS KBUsed,
p.rows AS [Rows]
FROM sys.tables t
INNER JOIN sys.partitions p
ON t.object_id = p.object_id
INNER JOIN sys.allocation_units a
ON a.container_id = p.partition_id
WHERE t.is_ms_shipped = 0
GROUP BY t.name,
p.rows
) SELECT * FROM KBhttps://dba.stackexchange.com/questions/182596
复制相似问题