在資料倉儲系統或大型資料庫常常因為TempDB設計不量造成效能低落,我曾經看過一個查詢超過2小時的查詢,經過修改TempDB後,效能提升到3分鐘以內。
另外發現TempDB容量空間異常時,我們可以使用DMV(Dynamic Management Views)去找尋原因,透過DMV可以快速的找到掌握TempDB的訊息。
希望這一系列的文章提供大家參考。
當發現TempDB容量空間異常時,我們會去尋找原因。
以下的程式碼可以幫助我們列出TempDB目前的使用狀況。
--列出所有TempDB使用情況
SELECT
a.login_name, a.host_name, a.program_name, st.text
, b.user_objects_alloc_page_count as pcount1
, b.user_objects_dealloc_page_count as pcount2
, b.internal_objects_alloc_page_count pcount3
, b.internal_objects_dealloc_page_count pcount4
, c.last_read, c.last_write
FROM sys.dm_exec_sessions a INNER JOIN sys.dm_db_session_space_usage b
ON b.session_id = a.session_id
LEFT OUTER JOIN sys.dm_exec_connections c
ON b.session_id = c.most_recent_session_id
OUTER APPLY sys.dm_exec_sql_text(c.most_recent_sql_handle) st
WHERE b.session_id > 50
檢查TempDB範例:
1.建立一個一個Temp Table
從上面的執行結果可以知道誰在使用TempDB、使用的容量大小與執行SQL語法。
有了這些資訊我們更容易改善TempDB的效能了。
結語:當查詢過慢找尋原因時,常常很多人忽略TempDB,這種情況常常發生在資料倉儲系統,我曾經看過一個查詢超過2小時的查詢,經過修改TempDB後,效能提升到3分鐘以內。所以我才會寫這一系列的文章提供大家參考。