2009-07-13 57 views
2

我們有一個SQL Server 2000生產環境,其中突然(即過去3天)導致tempdb數據文件增長得非常大(45個演出數據庫僅有10個演出)。 昨天,再次發生之後,我們收縮了數據庫並單獨運行主要批處理過程而沒有任何問題。不過,今天早上該數據庫備份了45個演出。Sql Server 2000 - tempdb增長非常大

是否有一個簡單的方法來找出是什麼導致這個數據庫增長如此之大?理想情況下,可以在今天看到的東西,但如果沒有明天可以獲得的信息。

順便說一句:收縮數據庫可在幾秒鐘內恢復空間。

+2

聽起來像一個服務器庫問題......但你可能想看看Sql Profiler。 – 2009-07-13 14:57:44

回答

2

與Jimmy同意,您需要使用SQL Profiler來查找創建如此密集的臨時對象。這可能是臨時表,使用一些報告或類似的東西。

+0

我會設置一些Profiler跟蹤來運行整夜跟蹤可能發生的事件:跟蹤運行超過10秒的任何事情,產生超過1M個數據讀取的任何事情,產生超過1M個寫入的任何事情(這將是三條獨立的痕跡)。很難說,很大程度上取決於你的環境和系統;跟蹤這些東西可能需要很長時間(因爲您只能在一夜之間運行並在第二天查看)。由於它是tempdb,它可能是一個單一的大動作,而不是一羣小傢伙(除非你有聲明事務)。 – 2009-07-13 16:00:15

0

你是否有一份工作正在運行,重建索引?這可能是它使用SORT_IN_TEMPDB

或做排序可能將tempdb擴展

0

這可能有事情做與在tempdb設置爲恢復模式的任何其他大型查詢。它可能設置爲FULL而不是BULK-LOGGED。完全恢復將增加事務日誌大小,直到執行備份。

查看數據文件大小與事務日誌大小。

0

我不是一個DBA,但一些想法:

  • 是否有可能有臨時創建 表,但不掉線? ##tempTable
  • 是否有可能 有一個大的臨時表 創建(和丟棄),但空間 不回收?
  • 您是否在做任何 批量加載類型的系統 可能使用臨時表? (如果可以的話,我不是 )但你能打開 tempdb的自動收縮功能嗎?
1

我想謝謝大家的答案,因爲他們肯定導致了問題的原因。

我們打開了SQL分析器,確定發現了大量的大容量負載。由於我們正在開展一個項目,以將「冒犯性」的工作轉移到mysql中,因此我們現在可能只會看一些事情。