Sql server 2012 TempDB使用SQL Server 2012

Sql server 2012 TempDB使用SQL Server 2012,sql-server-2012,tempdb,Sql Server 2012,Tempdb,在我的新组织中,我们有一个60 GB的生产数据库。我们在一夜之间从该数据库运行了500份报告。我注意到所有报告脚本都在TempDB中创建表,然后填充最终报告TempDB大小为6 GB。没有为这些从PowerShell调用的报表脚本设置依赖项 以这种方式广泛使用TempDB是否是一种良好的做法?还是最好在生产数据库本身中创建所有临时表,并在生成报告后删除它们 谢谢, Roopesh总是在TempDb中创建临时表。但是,TempDb的大小不一定只由临时表决定。TempDb的使用方式多种多样 内部对

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

以这种方式广泛使用
TempDB
是否是一种良好的做法?还是最好在生产数据库本身中创建所有临时表,并在生成报告后删除它们

谢谢,
Roopesh总是在TempDb中创建临时表。但是,TempDb的大小不一定只由临时表决定。TempDb的使用方式多种多样

  • 内部对象(排序和假脱机、CTE、索引重建、哈希连接等)
  • 用户对象(临时表、表变量)
  • 版本存储(在触发器之后/代替触发器,MARS)
因此,很明显,它正在各种SQL操作中使用,因此,由于其他原因,它的大小也会增加。但是,在您的情况下,如果您的TempDb有足够的空间正常运行,并且您的内部进程正在使用TempDb创建临时表,那么这不是一个问题。您可以将TEMPDB视为SQLServer的厕所。 您可以使用下面的查询检查是什么导致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,并首先确定其增长的真正原因。然而,60GB是一个相当小的数据库,6GB的TempDB大小是可以接受的


以上答案的一部分是从SO抄袭过来的。

使用tempdb(明确地)没有什么错。tempdb通常是隐式使用的(即在您的控制之外)。