2010-06-26 78 views
1

我在Windows Server 2008上使用SQL Server 2008.我發現臨時數據庫mdf和臨時ldf非常大(大約13G),並且它幾乎與所有其他實際應用程序數據庫文件的大小相同(MDF + LDF)。SQL Server臨時數據庫問題

我的問題,

  1. 是用來做什麼的臨時DB?
  2. 臨時DB這麼大是正常情況嗎?如果沒有,有什麼方法可以在不影響系統性能和可靠性的情況下清理臨時數據庫?

由於事先 喬治

+2

您是否嘗試過搜索? – 2010-06-26 05:56:30

+0

我在Google之後沒有找到第2項的答案。你有什麼想法? – George2 2010-06-26 14:47:19

回答

2

您可以使用shrinkfile,shrinkdatabase DBCC命令來收縮tempdb mdf/ldf文件。

use tempdb 
go 

dbcc shrinkfile (tempdev, 'target size in MB') 
go 

dbcc shrinkfile (templog, 'target size in MB') 
go 

以有效的方式編寫代碼可以避免tempdb的增長。避免在代碼中使用「遊標」,這是性能的主要殺手,遊標的數據集越大,tempdb的大小越大。避免在不需要時使用臨時表。當不需要時會使用#temptable,##整個範圍的temptable會再次導致性能問題。

SQL 2005/2008具有CTE,您可以在其中查詢臨時表上的數據,並且範圍僅爲其後的一行。

;With CTETable as 
(
    SELECT <Columnlist> FROM <TableName> {Joins} WHERE <Condition> GROUP BY <Column List> ORDER BY <COlumn> ASC 
) 

SELECT ColumnList from CTETABLE 
.... 
Statements 

CTEtable的範圍在「SELECT ColumnList from CTETABLE」行之後過期。這樣更有效。編寫有效的查詢也會有所幫助。

+0

Hi Baaju,1.我想知道從控制面板重新啓動SQL Server服務是否會自動收縮臨時數據庫? 2.在您的語句中,dbcc shrinkfile(tempdev,'MB目標大小'),tempdev用於什麼目的? – George2 2010-06-26 14:56:11

+0

另一個問題是收縮溫度數據庫是否影響性能? – George2 2010-06-26 15:08:18

+1

RTFM - 它在文檔中有詳細記錄。 tempdb是在每個服務器啓動時創建的。縮減tempdb不會影響性能 - 如果不允許增長,太小會導致錯誤。注意:爲獲得最佳性能,請調整tempdb的文件數量。 – TomTom 2010-06-27 00:24:38

1

1:tempdb數據庫用於諸如排序。 Anythin臨時。愚蠢的開發人員不必要地使用DISTINCT語句正在將它擊中。加臨時表。

2:不,這種情況可能是罕見的情況,但這些情況是不尋常的。 Tempdb清理....重新啓動服務器。 Tempdb在每次啓動時都會重新生成。然後開始尋找進入tempdb的查詢。這將需要一些手動工作。檢查不必要的DISTINCT子句。

+0

嗨,TomTom!你的意思是從控制面板重新啓動SQL Server服務會收縮臨時數據庫嗎?如果是這樣,你是否有任何文件證明這一點?我沒有從Google找到。 – George2 2010-06-26 14:53:51

+0

另一個問題是收縮溫度數據庫是否影響性能? – George2 2010-06-26 15:05:11