帶有數據庫前綴的 sys.dm_db_file_space_usage 的不同結果
為了簡單起見:
根據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;
如您所見,輸出將是相同的。但是,如果您在 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。
希望有幫助。