SQL Server: Verificar a utilização dos discos 💿

📋 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:

Drive
TotalSpaceGB
FreeSpaceGB
PctFree
PctFreeExact
C:
100 GB
30 GB
30.00%
30.00%
D:
500 GB
150 GB
30.00%
30.00%

E para os arquivos de banco de dados:

DBName
PhysicalFileLocation
LogicalName
Drive
FreeSpaceInMB
SPA
C:\SQLData\SPA.mdf
SPA_Data
C:
5120
SPA
D:\SQLLogs\SPA_Log.ldf
SPA_Log
D:
4096


🚀 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! 🚀

Data de Publicação: 14-06-2024

Categoria: SQL Server