在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 DBFJOIN  sys.dm_io_virtual_file_stats(2, NULL) AS FS    ON FS.file_id = DBF.file_idWHERE  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 DBFJOIN  sys.dm_io_virtual_file_stats(2, NULL) AS FS    ON FS.file_id = DBF.file_idWHERE  DBF.type_desc = 'ROWS'



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

更多相关文章

  1. Linux系统查看磁盘可用空间的5个命令
  2. Android(安卓)获取存储卡路径和空间使用情况
  3. Android中设置控件可见与不可见详…
  4. Android的layout_weight属性释疑
  5. Android:Layout_weight属性解析
  6. android获取设备空闲空间
  7. android sd卡状态、路径、可用空间,内存
  8. Android获取SD卡剩余空间
  9. Android文件存储

随机推荐

  1. c程序的执行是从什么开始到什么结束?
  2. c语言如何求最大值
  3. c语言提供的合法的数据类型关键字是什么?
  4. 对c语言的认识和想法是什么
  5. c语言console.WriteLine什么意思?
  6. c语言中要求对变量作强制定义的主要理由
  7. c语言大小写字母怎么转化?
  8. dev c++怎么用
  9. c语言中do while语句怎么使用
  10. c语言取余符号是什么