Estou usando a consulta para descobrir o tamanho do arquivo do banco de dados. Estou usando a visualização do sistema e o DMV, porque quero descobrir o tamanho real do arquivo e o tamanho teórico (no caso de arquivos esparsos ).
Select
DB_NAME(mf.database_id) AS [Database Name],
mf.Name,
mf.physical_name PhysicalName,
cast(mf.size as bigint) * 8192 mfSize_bytes,
fs.size_on_disk_bytes fsSize_bytes
From sys.master_files mf
Left Join sys.dm_io_virtual_file_stats(DEFAULT, DEFAULT) fs
On mf.database_id = fs.database_id and mf.file_id = fs.file_id
Order By DB_NAME(mf.database_id)
Estou confuso - converti os dois valores em "bytes", comparando-os. Mas em todas as instâncias que verifiquei, o tamanho do arquivo temdb (de sys.master_files) é menor que o tamanho do arquivo no disco (de sys.dm_io_virtual_file_stats).
Em todos os outros casos, se houver diferença, isso está correto (o tamanho no disco é realmente menor que o tamanho do arquivo - porque são arquivos esparsos).
Qual é a razão para esta diferença?
ATUALIZAÇÃO: Quando estou consultando
Select is_sparse, * From sys.database_files
No instantâneo do banco de dados do SQL Server 2005, a coluna is_sparse = 0 (porque está mostrando as propriedades dos arquivos do banco de dados original, não do arquivo instantâneo. Portanto, há um bug na documentação ?).
Apenas observando os resultados da consulta em minha instância de desenvolvimento local, vejo duas diferenças (provavelmente existem mais):
sys.master_files
retorna o tamanho "virtual" de um arquivo, enquantosys.dm_io_virtual_file_stats
retorna o tamanho em disco do arquivo. Só vejo tamanhos diferentes para instantâneos de banco de dados, que usam arquivos esparsos NTFS nos bastidores (e verifiquei os tamanhos alocados e em disco no Windows).sys.dm_io_virtual_file_stats
não retorna tamanhos para bancos de dados que estão offline, enquanto retornasys.master_files
.No caso de
tempdb
,sys.master_files
contém os tamanhos de arquivo de inicializaçãotempdb
para . Se você investigarsys.database_files
no contexto detempdb
, verá os tamanhos atuais.