若何檢查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。