0

sql server中的任何脚本来查找临时表使用的空间+在tempdb中创建该临时表的数据库名称?

我的 tempDb 的大小已增长到 100 GB,我无法恢复空间并且不确定是什么占用了这么多空间。

谢谢你的帮助。

4

2 回答 2

3

临时表总是在 TempDb 中创建。但是,TempDb 的大小不必仅取决于临时表。TempDb 以多种方式使用

  1. 内部对象(排序和假脱机、CTE、索引重建、哈希连接等)
  2. 用户对象(临时表、表变量)
  3. 版本存储(AFTER/INSTEAD OF 触发器,MARS)

因此,很明显它正在用于各种 SQL 操作,因此大小也会由于其他原因而增长

您可以使用以下查询检查导致 TempDb 大小增加的原因

SELECT
 SUM (user_object_reserved_page_count)*8 as usr_obj_kb,
 SUM (internal_object_reserved_page_count)*8 as internal_obj_kb,
 SUM (version_store_reserved_page_count)*8  as version_store_kb,
 SUM (unallocated_extent_page_count)*8 as freespace_kb,
 SUM (mixed_extent_page_count)*8 as mixedextent_kb
FROM sys.dm_db_file_space_usage

如果上面的查询显示,

  • 更多的用户对象意味着有更多的使用临时表,游标或临时变量
  • 更多的内部对象表明查询计划正在使用大量的数据库。例如:排序、分组等。
  • 更高数量的版本存储显示长时间运行的事务或高事务吞吐量

基于此,您可以配置 TempDb 文件大小。我最近写了一篇关于 TempDB 配置最佳实践的文章。你可以在这里阅读

于 2015-09-23T19:47:29.477 回答
0

也许您可以分别对临时数据库文件使用以下 SQL 命令

DBCC SHRINKFILE

请参阅https://support.microsoft.com/en-us/kb/307487了解更多信息

于 2015-09-14T10:39:19.043 回答