Para simplificar:
De acordo com o MSDN (link) entre outras fontes, você pode obter a quantidade de espaço livre atual no tempdb usando o seguinte bit do TSQL:
-- 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;
Agora, estamos usando um script agendado que faz o que pode dinamicamente sem exagerar no uso do espaço. Antes de hoje, a versão do MSDN funcionava bem em ambientes que usavam SQL Server 2008 em cluster, mas hoje descobri que um de nossos novos ambientes com SQL Server 2012 e AlwaysOn Availability Groups se comporta de maneira diferente.
Lá, a "versão do MSDN" quase não retorna espaço livre, enquanto a "outra" versão mostra corretamente o espaço livre disponível no tempdb.
Alguém pode me explicar isso? Existe um tempdb compartilhado entre todos os grupos de réplicas AlwaysOn para que, por padrão, não defina especificamente o tempdb de alguma forma como padrão para alguma versão local do tempdb ou o que realmente está acontecendo aqui? Posso confiar que as consultas executadas no banco de dados realmente utilizam tempdb.sys.dm_db_file_usage_space em oposição a tudo o que sys.dm_db_file_usage_space regular está apontando?
Estou tentando descobrir mais sobre isso sozinho, mas precisamos de uma resposta com bastante urgência, então estou perguntando aqui só para ter certeza. Obrigado!
Parece que esse DMO específico foi alterado para funcionar com todos os bancos de dados. Isso pode ser demonstrado executando os seguintes scripts em um servidor 2008r2.
Como você pode ver, a saída será a mesma. No entanto, se você executar os mesmos scripts em um servidor 2012, a saída será diferente.
A Technet explica que no 2008R2 o DMO funcionava apenas no tempdb http://technet.microsoft.com/en-us/library/ms174412(v=sql.105).aspx e em 2012 essa restrição foi removida http://technet .microsoft.com/en-us/library/ms174412(v=sql.110).aspx .
Espero que ajude.