📋 Descrição
Monitorar a utilização dos discos no SQL Server é essencial para garantir que o sistema tenha espaço suficiente para o armazenamento de dados e evitar falhas relacionadas ao esgotamento de espaço em disco. A consulta a seguir fornece informações detalhadas sobre o uso do disco, como espaço total, espaço livre e percentual de espaço livre, tanto para todos os volumes de disco como para os arquivos de banco de dados específicos.
Esse monitoramento é particularmente útil para:
- Gerenciamento de espaço em disco: Evitar que o banco de dados atinja o limite de espaço disponível, o que pode resultar em falhas.
- Auditoria e relatórios: Gerar relatórios regulares sobre o uso do disco para análise e planejamento de capacidade.
- Performance e manutenção: Garantir que o SQL Server tenha espaço suficiente para realizar operações de I/O de forma eficiente.
🛠️ Estrutura da Query
A consulta apresenta duas partes: a primeira verifica o uso geral do disco, e a segunda verifica a disponibilidade de espaço nos arquivos de banco de dados. Abaixo, veja o código completo:
-- Verifica a utilização de discos
SELECT
Drive,
TotalSpaceGB,
FreeSpaceGB,
PctFree,
PctFreeExact
FROM (
SELECT DISTINCT
SUBSTRING(dovs.volume_mount_point, 1, 10) AS Drive,
CONVERT(INT, dovs.total_bytes / 1024.0 / 1024.0 / 1024.0)
AS TotalSpaceGB,
CONVERT(INT, dovs.available_bytes / 1048576.0) / 1024
AS FreeSpaceGB,
CAST(
ROUND((
CONVERT(FLOAT, dovs.available_bytes / 1048576.0) /
CONVERT(FLOAT, dovs.total_bytes / 1024.0 / 1024.0) * 100 ), 2)
AS NVARCHAR(50)) + '%'
AS PctFree,
CONVERT(FLOAT, dovs.available_bytes / 1048576.0) /
CONVERT(FLOAT, dovs.total_bytes / 1024.0 / 1024.0) * 100
AS PctFreeExact
FROM
sys.master_files AS mf
CROSS APPLY sys.dm_os_volume_stats(mf.database_id, mf.file_id) AS dovs ) AS DE
-- Verifica a utilização do espaço nos arquivos de banco de dados
SELECT DISTINCT
DB_NAME(dovs.database_id) AS DBName,
mf.physical_name AS PhysicalFileLocation,
dovs.logical_volume_name AS LogicalName,
dovs.volume_mount_point AS Drive,
CONVERT(INT,dovs.available_bytes / 1048576.0) AS FreeSpaceInMB
FROM
sys.master_files mf
CROSS APPLY sys.dm_os_volume_stats(mf.database_id, mf.FILE_ID) dovs
ORDER BY
FreeSpaceInMB ASC;
📊 Explicação da Query
✅ sys.master_files: Exibe informações sobre os arquivos de banco de dados do SQL Server, como arquivos de dados e de log.
✅ sys.dm_os_volume_stats: Fornece estatísticas detalhadas sobre os volumes de disco em que os arquivos de banco de dados estão armazenados, incluindo o espaço total e disponível.
✅ Espaço Total e Livre: A consulta retorna informações sobre o total de espaço (em GB) e o espaço livre (em GB), além de um cálculo do percentual de espaço livre (PctFree) e um valor exato (PctFreeExact).
✅ Ordenação: A segunda parte da consulta organiza os resultados de acordo com o espaço livre em MB, do menor para o maior.
💡 Exemplo de Uso
A consulta retorna resultados como este:
E para os arquivos de banco de dados:
🚀 Conclusão
Manter o controle sobre a utilização dos discos no SQL Server é fundamental para evitar problemas relacionados ao espaço de armazenamento. A consulta apresentada oferece uma maneira simples e eficiente de monitorar a utilização do disco, garantindo que a operação do banco de dados não seja comprometida por falta de espaço.
✔ Execute periodicamente essa consulta para manter o ambiente do SQL Server sempre saudável e evitar surpresas desagradáveis! 🚀