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