2015-12-17 92 views
3

我們的新組織中有一個60 GB的生產數據庫。我們在這個數據庫中隔了近500個報告。我注意到所有報告腳本都在TempDB中創建表格,然後填充最終報告。 TempDB大小是6 GB。這些報告腳本沒有設置依賴項,這些腳本是從PowerShell調用的。TempDB用法SQL Server 2012

以這種方式廣泛使用TempDB是否是一種好習慣?或者,在生產數據庫本身中創建所有臨時表並在生成報告後放下它們會更好嗎?

感謝, Roopesh

+0

使用tempdb沒有錯(明確地)。通常tempdb是隱式使用的(即在你的控制之外)。 –

回答

2

臨時表總是被在tempdb中創建。但是,TempDb的大小不一定只是由於臨時表。 tempdb的用於以各種方式

  • 內部對象(排序&閥芯,CTE,索引重建,散列連接等)
  • 用戶對象(臨時表,表變量)
  • 版商店(AFTER/INSTEAD OF觸發器,MARS)

因此,很顯然它在各種SQL操作中使用,因此也可能由於其他原因而增大大小。但是,對於您的情況,如果您的TempDb有足夠的空間來正常運行,並且您的內部進程正在使用TempDb創建臨時表並且這不是問題。您可以將TempDb視爲SQL Server的廁所。

您可以檢查是什麼原因造成的tempdb到,如果上面的查詢顯示與擴大其規模低於查詢

SELECT 
SUM (user_object_reserved_page_count)*8 as usr_obj_kb, 
SUM (internal_object_reserved_page_count)*8 as internal_obj_kb, 
SUM (version_store_reserved_page_count)*8 as version_store_kb, 
SUM (unallocated_extent_page_count)*8 as freespace_kb, 
SUM (mixed_extent_page_count)*8 as mixedextent_kb 
FROM sys.dm_db_file_space_usage 

  • 較高的用戶對象的話,那就意味着有更多的用途臨時表,光標或臨時變量
  • 更高數量的內部對象表示查詢計劃正在使用大量數據庫。例如:排序,分組依據等
  • 人數較多版本存儲的顯示長期運行的事務或高事務吞吐量

可以監視通過上面的腳本tempdb中,並首先確定其增長的真正原因。但是,60 GB是相當小的數據庫,6GB的TempDB大小是相當可接受的。

上述答案的一部分從我的other answer中複製而來。