首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >系统不会清理tempdb中的临时表。

系统不会清理tempdb中的临时表。
EN

Database Administration用户
提问于 2017-08-03 13:11:10
回答 1查看 4.6K关注 0票数 2

我的问题类似于这里提出的一个问题:服务器流氓临时表

由于我没有足够的观点来评论,而且答案也没有解决我的担忧,所以我只能在这里提出一个新的问题。

使用Visual 2017中的SQL搜索工具,我可以看到表中的列,并确认名为#BC835DE的临时表确实来自与存储过程相关的表变量。我重新运行这个程序,没有任何问题,但这张表仍然挂着。我怎样才能放下这样的桌子,清理tempdb呢?谢谢。

PS。根据SQL搜索工具的结果,似乎不是所有名为#BBC835DE的表都来自表变量,有些表也来自存储过程中声明的游标。

EN

回答 1

Database Administration用户

回答已采纳

发布于 2017-08-03 14:10:51

我相信这与计划缓存有关。只是在我那头做了个小测试,我就可以复制了。

要从tempdb DBCC FREEPROCCACHE工作中删除表,显然要针对存储过程的计划句柄。

您可以这样做,但是它会再次出现,并且始终释放缓存通常不是最好的主意。

如果您担心它占用空间,您可以运行我为一个应该工作的监视工具编写的查询。在我的测试中,它总是在SP完成后显示0KB。这让我相信,它只是将表的外壳保存在那里,以供内部使用。所以对我来说是无害的。

代码语言:javascript
复制
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 KB
票数 3
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/182596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档