您的位置:首页 > 数据库 > 数据库管理 > 正文

查看SQL SERVER中某个查询用了多少TempDB空间

更多 时间:2016-6-26 类别:数据库 浏览量:291

查看SQL SERVER中某个查询用了多少TempDB空间

查看SQL SERVER中某个查询用了多少TempDB空间

一、TempDB系统数据库的理解

 

1、tempdb是SQL Server的系统数据库一直都是SQL Server的重要组成部分,用来存储临时对象。应用程序与数据库都可以使用tempdb作为临时的数据存储区。一个实例的所有用户都共享一个Tempdb,当多个应用程序的数据库部署在同一台服务器上的时候,应用程序共享tempdb,如果开发人员不注意对Tempdb的使用就会造成这些数据库相互影响从而影响应用程序。

 

2、tempdb全局存储内部对象,用户对象,临时表,临时对象,以及SQL Server操作创建的存储过程。每个数据库实例只有一个tempdb,所以可能存在性能以及磁盘空间瓶颈。各种形式的可用空间及过度的DDL/DML操作都会导致tempdb负载过重。这会导致运行在服务器上不相干程序运行缓慢或者运行失败。

 

3、在SQL Server中,TempDB主要负责

(1)、内部使用(排序、hash join、work table等)

一些比较复杂的查询中由于涉及到了大量的并行、排序等操作时就需要大量的内存空间,每一个查询在开始时都会由SQL Server预估需要多少内存,在具体的执行过程中,如果授予的内存不足,则需要将多出来的部分由TempDB处理


(2)、外部使用(临时表,表变量等)


(3)、行版本控制(乐观并发控制)

 

 

二、查看SQL SERVER中某个查询用了多少TempDB空间

 

  •  
  • SQL 代码   复制
  • 
    DECLARE @read  BIGINT, 
        @write BIGINT
    ;    
    SELECT @read = SUM(num_of_bytes_read), 
        @write = SUM(num_of_bytes_written) 
    FROM  tempdb.sys.database_files AS DBF
    JOIN  sys.dm_io_virtual_file_stats(2, NULL) AS FS
        ON FS.file_id = DBF.file_id
    WHERE  DBF.type_desc = 'ROWS'
     
    --这里放入需要测量的语句
    
    SELECT tempdb_read_MB = (SUM(num_of_bytes_read) - @read) / 1024. / 1024., 
        tempdb_write_MB = (SUM(num_of_bytes_written) - @write) / 1024. / 1024.,
        internal_use_MB = 
          (
          SELECT internal_objects_alloc_page_count / 128.0
          FROM  sys.dm_db_task_space_usage
          WHERE  session_id = @@SPID
          )
    FROM  tempdb.sys.database_files AS DBF
    JOIN  sys.dm_io_virtual_file_stats(2, NULL) AS FS
        ON FS.file_id = DBF.file_id
    WHERE  DBF.type_desc = 'ROWS'
    
    		
  •  

    标签:SQL SERVER