Sql-Server

帶有數據庫前綴的 sys.dm_db_file_space_usage 的不同結果

  • January 30, 2014

為了簡單起見:

根據MSDN(連結)以及其他來源,您可以使用以下 TSQL 位獲取 tempdb 中目前可用空間的數量:

-- MSDN version
SELECT SUM(unallocated_extent_page_count) AS [free pages], 
(SUM(unallocated_extent_page_count)*1.0/128) AS [free space in MB]
FROM sys.dm_db_file_space_usage;

-- The "other" version
SELECT SUM(unallocated_extent_page_count) AS [free pages], 
(SUM(unallocated_extent_page_count)*1.0/128) AS [free space in MB]
FROM tempdb.sys.dm_db_file_space_usage;

現在,我們正在使用一個預定的腳本,它可以動態地做它可以做的事情,而不會過度使用空間。在今天之前,MSDN 版本在使用集群 SQL Server 2008 的環境中執行良好,但今天我發現我們使用 SQL Server 2012 和 AlwaysOn 可用性組的新環境之一表現不同。

在那裡,“MSDN 版本”幾乎沒有返回可用空間,而“其他”版本正確顯示了 tempdb 中的可用空間。

誰可以給我解釋一下這個?在所有 AlwaysOn 副本組之間是否存在共享 tempdb,因此預設情況下,未專門定義 tempdb 以某種方式預設為 tempdb 的某個本地版本,或者這裡到底發生了什麼?我可以相信針對數據庫執行的查詢實際上是利用 tempdb.sys.dm_db_file_usage_space 而不是正常的 sys.dm_db_file_usage_space 所指出的?

我正在嘗試自己了解更多有關此問題的資訊,但我們非常迫切地需要一個答案,所以我在這裡詢問只是為了確定。謝謝!

看起來特定的 DMO 已更改為適用於所有數據庫。這可以通過在 2008r2 伺服器上執行以下腳本來展示。

SELECT SUM(unallocated_extent_page_count) AS [free pages], 
(SUM(unallocated_extent_page_count)*1.0/128) AS [free space in MB]
FROM model.sys.dm_db_file_space_usage;

-- The "other" version
SELECT SUM(unallocated_extent_page_count) AS [free pages], 
(SUM(unallocated_extent_page_count)*1.0/128) AS [free space in MB]
FROM tempdb.sys.dm_db_file_space_usage;

2008R2

如您所見,輸出將是相同的。但是,如果您在 2012 伺服器上執行相同的腳本,則輸出會有所不同。

2012

Technet 解釋說,在 2008R2 中,DMO 僅適用於 tempdb http://technet.microsoft.com/en-us/library/ms174412(v=sql.105).aspx,並且在 2012 年取消了該限制http://technet .microsoft.com/en-us/library/ms174412(v=sql.110).aspx

希望有幫助。

引用自:https://dba.stackexchange.com/questions/57878