首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TempDB使用Server 2012

TempDB使用Server 2012
EN

Stack Overflow用户
提问于 2015-12-17 11:27:51
回答 1查看 911关注 0票数 3

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

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

谢谢,Roopesh

EN

回答 1

Stack Overflow用户

发布于 2015-12-23 14:35:41

临时表总是在TempDb中创建的。但是,TempDb的大小不需要仅由临时表造成。TempDb以各种方式使用。

  • 内部对象(排序&假脱机、CTE、索引重建、哈希连接等)
  • 用户对象(临时表、表变量)
  • 版本存储(在触发器之后/而不是触发器,MARS)

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

您可以使用下面的查询检查是什么导致TempDb的大小增加

代码语言:javascript
复制
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是一个很小的数据库,6GB的TempDB大小是相当可以接受的。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34333451

复制
相关文章

相似问题

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