【问题标题】:TempDB usage SQL Server 2012TempDB 使用 SQL Server 2012
【发布时间】:2015-12-23 22:35:41
【问题描述】:

我的新组织中有一个 60 GB 的生产数据库。我们在一夜之间从这个数据库中运行了 500 份报告。我注意到所有报告脚本都在TempDB 中创建表格,然后填充最终报告。 TempDB 大小为 6 GB。没有为这些从 PowerShell 调用的报告脚本设置依赖项。

以这种方式广泛使用TempDB 是一种好习惯吗?还是在生产数据库本身中创建所有暂存表并在生成报告后删除它们更好?

谢谢, 鲁普什

【问题讨论】:

  • 使用 tempdb 没有任何问题(明确地)。 tempdb 通常被隐式使用(即在您的控制之外)。

标签: sql-server-2012 tempdb


【解决方案1】:

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

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

因此,很明显它被用于各种 SQL 操作,因此大小也会由于其他原因而增长。但是,在您的情况下,如果您的 TempDb 有足够的空间来正常运行,并且您的内部进程正在使用 TempDb 创建临时表,这不是问题。您可以将 TempDb 视为 SQL Server 的厕所。

您可以通过以下查询检查导致 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 并首先确定其增长的真正原因。然而,60 GB 是一个相当小的数据库,6 GB 的 TempDB 大小是可以接受的。

上面的部分答案是从我的other answer 复制过来的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    相关资源
    最近更新 更多