代码之家  ›  专栏  ›  技术社区  ›  pso

取消分配tempdb sql server中未使用的空间

  •  0
  • pso  · 技术社区  · 11 年前

    sqlserver中有任何脚本可以查找临时表使用的空间+tempdb中创建临时表的数据库名称吗?

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

    谢谢你的帮助。

    2 回复  |  直到 11 年前
        1
  •  3
  •   Anuj Tripathi Charles Farr    10 年前

    临时表总是在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
    

    如果上述查询显示,

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

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

        2
  •  0
  •   Eralper    11 年前

    也许您可以分别对tempdb文件使用以下SQL命令

    DBCC SHRINKFILE
    

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

    推荐文章