服务器(SQL Server 2008)的tempdb每月增加几次,达到500GB +。是否有可能找出导致该问题的SQL语句?问题通常不是由create table #temp...; insert into #temp...select ... into #temp...引起的,而是复杂的联接。

某些tempdb文件的初始大小每次也会自动设置为更大的值。如何防止呢?

有时缓存的计划会阻止调整大小/缩小文件。如何找到哪个人持有tempdb?

评论

抱歉,将近凌晨2点,我没有时间完全回答这个问题,但是当您等待其他答案时,这些URL可能会派上用场-mssqltips.com/sqlservertip/1432/…和google.com/search?q=哪些+查询+正在+使用+ tempdb

#1 楼

您可以使用三种DMV来跟踪tempdb的使用情况:

前两个允许您在查询和会话级别跟踪分配。第三个跟踪版本存储库,用户和内部对象之间的分配。

以下示例查询将为您提供每个会话的分配:

SELECT
  sys.dm_exec_sessions.session_id AS [SESSION ID]
  ,DB_NAME(database_id) AS [DATABASE Name]
  ,HOST_NAME AS [System Name]
  ,program_name AS [Program Name]
  ,login_name AS [USER Name]
  ,status
  ,cpu_time AS [CPU TIME (in milisec)]
  ,total_scheduled_time AS [Total Scheduled TIME (in milisec)]
  ,total_elapsed_time AS    [Elapsed TIME (in milisec)]
  ,(memory_usage * 8)      AS [Memory USAGE (in KB)]
  ,(user_objects_alloc_page_count * 8) AS [SPACE Allocated FOR USER Objects (in KB)]
  ,(user_objects_dealloc_page_count * 8) AS [SPACE Deallocated FOR USER Objects (in KB)]
  ,(internal_objects_alloc_page_count * 8) AS [SPACE Allocated FOR Internal Objects (in KB)]
  ,(internal_objects_dealloc_page_count * 8) AS [SPACE Deallocated FOR Internal Objects (in KB)]
  ,CASE is_user_process
             WHEN 1      THEN 'user session'
             WHEN 0      THEN 'system session'
  END         AS [SESSION Type], row_count AS [ROW COUNT]
FROM 
  sys.dm_db_session_space_usage
INNER join
  sys.dm_exec_sessions
ON  sys.dm_db_session_space_usage.session_id = sys.dm_exec_sessions.session_id


如果如果要跟踪一段时间的使用情况,请考虑使用sp_whoisactive收集数据,如Kendra Little所示。

评论


谢谢。 [SPACE为用户对象分配空间(以KB为单位)]和[SPACE为用户对象分配空间(以KB为单位)]是会话的实际占用空间吗?

– u23432534
2012年2月26日在2:22

#2 楼

问题的来源可能很多:


表变量或临时表的使用
sql server在tempdb中将中间结果集作为工作表创建-通常用于排序目的(通常是缺少索引的符号/过期的统计信息)
sql server决定预先评估表值函数的结果集,在这种情况下,它将数据存储在tempdb中。 />


#3 楼

我正在使用查询存储
,将“度量标准”选择为“已使用的临时数据库内存(KB)”,将统计信息选择为“最大”。
然后我找到了杀死我的TempDB的男孩。已经检查了查询存储功能,该功能不适用于SQL Server2008。


评论


我们启用了查询存储,但是在下拉列表中看不到使用的临时数据库内存。您是如何使它出现在@Tajmahals的?

–山本彰(Akira Yamamoto)
20年6月12日在1:40



@AkiraYamamoto我认为自SQL Server 2016起就可以使用TempDB度量。SQLServer 2014可能没有。

–塔杰马哈尔斯
20年6月16日在8:05

tks,我们正在使用SQL Server 2016 tho

–山本彰(Akira Yamamoto)
20 Jun 17'0:31