了解 tempdb 中版本儲存的使用
我們正在嘗試分析 tempdb 在我們的 SQL server 2005 Ent SP4 之一上的增長。
我知道 tempdb 需要空間,具體取決於事務以及查詢的設計方式來使用它。
我們遇到了磁碟空間已滿的問題,我們分析了 tempdb 是如何在一周內變得如此之大的。
重啟後,通過監控,我們遇到了 4-5 個查詢,這些查詢將版本儲存超過 20 分鐘,在同一天的垃圾郵件中, tempdb 從最初的 2 GB(4 個數據文件)增長到超過 100 GB 6-8小時。
例如
查詢 A 將版本儲存保存 10 分鐘,目前版本生成速率為 23.81 KB/秒,清理速率為 0.00 KB/秒。版本儲存大小為 17 MB,tempdb 文件大小為 10332 MB。
一個小時後,查詢 B 執行,版本儲存 16 分鐘,目前版本生成速率為 33.81 KB/秒,清理速率為 0.00 KB/秒。版本儲存大小為 45 MB,tempdb 文件大小為 45332MB。
類似地,查詢 C 在 3-4 小時後執行,版本儲存 15 分鐘,目前版本生成速率為 33.81 KB/秒,清理速率為 0.00 KB/秒。版本儲存大小為 19 MB,tempdb 文件大小為 85332MB。
等等。在我們那天的監控中。
現在同樣的查詢在第二天和第二天執行,
我們看到 tempdb 分配和釋放的值在第一天執行得有些相似,但 tempdb 並沒有增長得那麼快。
即將到來的 7-8 天也會發生同樣的情況,其中增長約為 8-10 GB,而第一天每天執行的類似查詢增長到 100 GB。
此外,目前的輸出
select count(*) from sys.dm_tran_version_store
是 196470 並且已經 2 天后重新啟動。
可能是我不知道這裡的某些過程,但請幫助我了解除了那些已確定的查詢之外的原因,因為如果它們是導致 tempdb 增長那麼多的原因,我們正在努力改進它們。
注意* tempdb 大小為 110 GB,它顯示的可用空間幾乎為 109 GB。
這可能有很多原因。
- 您正在執行查詢並生成一個版本,在另一個查詢期間使用相同的表。在此階段,版本 1 將被保留。如果您的事務最後沒有送出,那麼版本 1 可能會在您的 tempdb 中持續很長時間。確保所有事務都可能已送出並關閉。
- 確保所有資訊都儲存在光碟上。您的資訊可能仍儲存在您的記憶中。這可能會導致在您的 tempdb 中保留一個版本。
CHECKPOINT
您可以在送出後使用強制閂鎖過程。希望這會對您有所幫助。
版本儲存基本上是由長時間執行的事務或高事務吞吐量引起的。您需要查找導致此問題的查詢。除該版本儲存外,在以下情況下使用:
- 由特徵的數據修改事務生成的行版本(MARS、線上索引、AFTER 觸發器等)
- 數據庫數據修改事務生成的行版本(數據庫使用快照或讀送出隔離)
請記住,TempDb 檢查點的優先級低於其他數據庫檢查點。我寫了一篇文章,詳細說明了 TempDb 的建議,這將為您提供更多關於它的見解。如果您有高版本商店,那麼您需要查看我提到的上述幾點。