169it科技资讯


当前位置:  数据库>sqlserver

如何查看SQLSERVER中某个查询用了多少TempDB空间

    来源: 互联网  发布时间:2014-10-15

    在SQL Server中,TempDB主要负责供下述三类情况使用:

内部使用(排序、hash join、work table等)
外部使用(临时表,表变量等)
行版本控制(乐观并发控制)
 
    而对于内部使用,一些比较复杂的查询中由于涉及到了大量的并行、排序等操作时就需要大量的内存空间,每一个查询在开始时都会由SQL Server预估需要多少内存,在具体的执行过程中,如果授予的内存不足,则需要将多出来的部分由TempDB处理,这也就是所谓的Spill to TempDB。

    通过下述语句可以观察到某个查询对TempDB造成了多少读写:

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'

    最近在一个客户那里看到的烂查询所导致的TempDB使用结果如下:


 
    使用该查询就可以帮助了解某个语句使用了多少TempDB。


    
相关技术文章:
    ▪在SQL Server中使用ISNULL执行空值判断查询

     有如下查询: 代码如下: select isnull(lastchanged,'') as lastchanged from vhhostlist where s_comment='test202' 本来,ISNULL函数只有一个参数,它表示的含义就是判断这个参数的值是否为NULL,是NULL则返回TRUE,否则返回FALSE; 但是,在SQLServer的查询语句中,isnull需要两个参数,它的含义是如果参数1为NULL,则以参数2为isnull函数的返回值; 即,上面查询的的含义是,查询vhhostlist表中s_comment='test202'那一行lastchanged字段的值,如果它为NULL,则返回一个空字符串; 记得以前不懂这个的时候,遇到这样一......


    ▪揭秘SQL Server 2014有哪些新特性(1)-内存数据库

     简介    SQL Server 2014提供了众多激动人心的新功能,但其中我想最让人期待的特性之一就要算内存数据库了。去年我再西雅图参加SQL PASS Summit 2012的开幕式时,微软就宣布了将在下一个SQL Server版本中附带代号为Hekaton的内存数据库引擎。现在随着2014CTP1的到来,我们终于可以一窥其面貌。 内存数据库     在传统的数据库表中,由于磁盘的物理结构限制,表和索引的结构为B-Tree,这就使得该类索引在大并发的OLTP环境中显得非常乏力,虽然有很多办法来解决这类问题,比如说乐观并发控制,应用程序缓存,分布式等。但成本依然会略高。而随着这些......


    ▪揭秘SQL Server 2014有哪些新特性(2)-固态硬盘 Buffer Pool(缓冲池

     简介     SQL Server 2014中另一个非常好的功能是,可以将SSD虚拟成内存的一部分,来供SQL Server数据页缓冲区使用。通过使用SSD来扩展Buffer-Pool,可以使得大量随机的IOPS由SSD来承载,从而大量减少对于数据页的随机IOPS和PAGE-OUT。 SSD AS Buffer Pool     SSD是固态硬盘,不像传统的磁盘有磁头移动的部分,因此随机读写的IOPS远远大于传统的磁盘。将SSD作为Buffer Pool的延伸,就可以以非常低的成本巨量的扩充内存。而传统的模式是内存只能容纳下热点数据的一小部分,从而造成比较大的Page-Out,如图1所示。 图1.大量随机的IOPS需要由磁盘阵列所承......


 
最新技术文章:
    ▪Sql Server里删除数据表中重复记录的例子

     [项目] 数据库中users表,包含u_name,u_pwd两个字段,其中u_name存在重复项,现在要实现把重复的项删除! [分析] 1、生成一张临时表new_users,表结构与users表一样; 2、对users表按id做一个循环,每从users表中读出一个条记录,判断new_users中是否存在有相同的u_name,如果没有,则把它插入新表;如果已经有了相同的项,则忽略此条记录; 3、把users表改为其它的名称,把new_users表改名为users,实现我们的需要。 [程序] 代码如下: declare ......


    ▪如何查看SQLSERVER中某个查询用了多少TempDB空间

         在SQL Server中,TempDB主要负责供下述三类情况使用: 内部使用(排序、hash join、work table等) 外部使用(临时表,表变量等) 行版本控制(乐观并发控制)       而对于内部使用,一些比较复杂的查询中由于涉及到了大量的并行、排序等操作时就需要大量的内存空间,每一个查询在开始时都会由SQL Server预估需要多少内存,在具体的执行过程中,如果授予的内存不足,则需要将多出来的部分由TempDB处理,这也就是所谓的Spill to TempDB。     通过下述语句可以观察到某个查询对TempDB造成了多少读写: ......


    ▪在SQL Server中使用ISNULL执行空值判断查询

     有如下查询: 代码如下: select isnull(lastchanged,'') as lastchanged from vhhostlist where s_comment='test202' 本来,ISNULL函数只有一个参数,它表示的含义就是判断这个参数的值是否为NULL,是NULL则返回TRUE,否则返回FALSE; 但是,在SQLServer的查询语句中,isnull需要两个参数,它的含义是如果参数1为NULL,则以参数2为isnull函数的返回值; 即,上面查询的的含义是,查询vhhostlist表中s_comment='test202'那一行lastchanged字段的值,如果它为NULL,则返回一个空字符串; 记得以前不懂这个的时候,遇到这样一......


 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2017,169IT.COM,E-mail:www_169it_com#163.com(请将#改为@)

浙ICP备11055608号