標籤:
一,Spool
Spool的中文解釋是假離線,離線是offline的翻譯。假離線的同義字,是不是真聯機?可以這樣理解,因為兩個裝置確實是聯機狀態,只不過是後台運行。
假離線的原理,通俗的說,是在兩個裝置之間進行資料交換,只不過,一個裝置傳遞資料的速度快,一個裝置傳遞資料的速度慢。為了充分利用高速裝置,在需要傳遞資料時,低速裝置將資料傳遞到緩衝區,同時,高速裝置無需等待低速裝置,而是徑直去處理其他Task,等低速裝置將全部資料傳遞完成之後,高速裝置再去緩衝區讀取資料,然後快速處理,這樣快速裝置就不會閑置,提高了利用率。spool 為了匹配兩個裝置,需要用到一個緩衝區,低速裝置向緩衝區中寫資料,高速裝置從緩衝區中讀取資料。所以,假離線技術的原理,是利用緩衝區轉存資料,匹配裝置的處理效能。
分析假離線原理,可以看到,spool額外用到一個緩衝區和兩次IO(寫入和讀取)。
二,SQL Server的Spool
樺仔的部落格寫的非常詳細《SQLSERVER中的假離線》,贊一個!
SQL Server的Spool 邏輯運算分為Eager Spool 和 lazy Spool,當出現這兩個運算子時,表明SQL Server 需要將計算的中間結果集儲存到臨時儲存區,這個臨時儲存區建立在tempdb中,臨時儲存區是Worktable 或 Workfile,儲存的內容是不同的。
work files could be used to store temporary results for hash joins and hash aggregates.
work tables could be used to store temporary results for query spool, lob variables, XML variables, and cursors.
"Work files could be used to store temporary results for hash joins and hash aggregates. The returned value should be less than 20. Tempdb work files are used in processing hash operations when the amount of data being processed is too large to fit into the available memory."
Possible problems: High values can indicate thrash in the tempdb file as well as poorly coded queries.
"Work tables could be used to store temporary results for query spool, lob variables, XML variables, and cursors. The returned value should be less than 20. Worktables are used for queries that use various spools (table spool, index spool, and so on)."
Possible problems: High values could cause general slowdown.
三,查看Workfile 和 Worktable
建立Workfile 和 Worktable 的目的是為了臨時儲存中間結果集,增加系統的IO負擔,可以通過“set statistics IO On”命令來查看查詢語句建立的Workfile 和worktable,查看臨時儲存區的IO資訊。
推薦閱讀:
SQLSERVER中的假離線
SQL Server的Spool, Worktable 和 Workfile