程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> 若何檢查SQLSERVER中某個查詢用了若干TempDB空間

若何檢查SQLSERVER中某個查詢用了若干TempDB空間

編輯:MSSQL

若何檢查SQLSERVER中某個查詢用了若干TempDB空間。本站提示廣大學習愛好者:(若何檢查SQLSERVER中某個查詢用了若干TempDB空間)文章只能為提供參考,不一定能成為您想要的結果。以下是若何檢查SQLSERVER中某個查詢用了若干TempDB空間正文


    在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。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved