2017年:
我有一個長期運行的存儲過程是tempdb的密集。在操作系統驅動器上設置Tempdb(如Azure默認配置的那樣),在使用SDD磁盤的DSv2機器上,查詢運行時間約爲1分半鐘。
將臨時數據庫移動到臨時存儲器(並且什麼都不做)將查詢更改爲在57秒內運行,因此性能提高了33%。在這兩種情況下,查詢都反覆執行,並且這些數字的時間安排是(一致或一致)。
將TempDB放在臨時存儲上需要特別考慮啓動SQL Server。有兩種方法。一種是將文件指向D的根目錄,並賦予SQL服務器進程本地管理權限。如果你已經有其他的東西在啓動SQL Server進程,而不僅僅是一個自動的服務啓動,那麼你就需要考慮這種情況。否則,它會提高安全性眉毛。
第二種方法是將SQL Server服務設置爲手動啓動,然後編寫一個powershell腳本以啓動它,並將該powershell腳本放在計劃任務上以在啓動時運行。在啓動SQL Server之前,powershell腳本將首先確保臨時存儲上存在該目錄。
它已經鏈接到另一個答案,但this document更新爲2017年,它並沒有正式推薦這種TempDb的設置,而只是將其從OS分區移出。然而,它說:
如果你的工作量使大量使用tempdb的(例如,用於臨時對象或複雜的連接),在d驅動器上存儲的TempDB可能會導致更高的TempDB吞吐量和更低的延遲TempDB的。
我的表現經驗證實了最後一行。
儘管基本概念是正確的,但2015年4月的文章有很多錯誤。該任務未配置爲在用戶未登錄時運行,腳本的定義需要雙引號而不是單引號,並且實際上並不測試該場景(提示,向臨時存儲添加垃圾文件並查看如果它被破壞)。 – Yishai