none
Monitorar espaço de disco RRS feed

  • Pergunta

  • Olá amigos,

    Estamos tendo problemas de espaço em disco e uma solução é ser pró-ativo, detectar o problema antes que aconteça.
    Então pensei, configurar o Alert do SQL SERVER 2005 para quando o espaço em disco for menor que 15 GB dispare um email comunicando a situação.

    Atraves do SQL SERVER 2005

    Terei que usar o WMI (3º opção)?

    Obrigado pela atenção!

    Abraço

    • Movido Gustavo Maia Aguiar quinta-feira, 5 de julho de 2012 01:50 (De:SQL Server - Desenvolvimento Geral)
    terça-feira, 24 de março de 2009 14:35

Respostas

  • 25GB = 25000000000

    Acho que faltou um zero no seu.

    att.
    Ricardo Muramatsu ricardomuramatsu@hotmail.com www.muramatsu.com.br
    • Marcado como Resposta Anderson.fsa quarta-feira, 25 de março de 2009 13:46
    quarta-feira, 25 de março de 2009 13:13
  • Anderson,

        Você pode sim criar um WMI para monitorar o seu espaço em disco. Veja o exemplo abaixo:

    USE [msdb]  
    GO  
     
    EXEC msdb.dbo.sp_add_alert   
    @name =N'Test',   
    @enabled =1,   
    @delay_between_responses =0,   
    @include_event_description_in =0,   
    @wmi_namespace =N'\\.\ROOT\CIMV2',   
    @wmi_query =N'SELECT * FROM __InstanceModificationEvent WITHIN 600 WHERE TargetInstance ISA "Win32_LogicalDisk" AND TargetInstance.FreeSpace < 1000000' 
    GO  
     

    Este exemplo dispara um alerta quando o espaço em disco do servidor local está com menos de 1 Mb livre (ajuste esse valor para o seu ambiente).

    Eu também recomendaria que você configurasse o Database Mail para que você fosse informado desse alerta.

    MCT / MCITP - Database Administrator MCITP - Database Developer 2008
    • Marcado como Resposta Anderson.fsa quarta-feira, 25 de março de 2009 13:46
    terça-feira, 24 de março de 2009 17:24
    Moderador

Todas as Respostas

  • Anderson,

        Você pode sim criar um WMI para monitorar o seu espaço em disco. Veja o exemplo abaixo:

    USE [msdb]  
    GO  
     
    EXEC msdb.dbo.sp_add_alert   
    @name =N'Test',   
    @enabled =1,   
    @delay_between_responses =0,   
    @include_event_description_in =0,   
    @wmi_namespace =N'\\.\ROOT\CIMV2',   
    @wmi_query =N'SELECT * FROM __InstanceModificationEvent WITHIN 600 WHERE TargetInstance ISA "Win32_LogicalDisk" AND TargetInstance.FreeSpace < 1000000' 
    GO  
     

    Este exemplo dispara um alerta quando o espaço em disco do servidor local está com menos de 1 Mb livre (ajuste esse valor para o seu ambiente).

    Eu também recomendaria que você configurasse o Database Mail para que você fosse informado desse alerta.

    MCT / MCITP - Database Administrator MCITP - Database Developer 2008
    • Marcado como Resposta Anderson.fsa quarta-feira, 25 de março de 2009 13:46
    terça-feira, 24 de março de 2009 17:24
    Moderador
  • Roberto,

    Muito legal este exemplo!!!
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    terça-feira, 24 de março de 2009 18:18
    Moderador
  • Olá Roberto,

    o DATAMail já esta configurado, já recebo diariamente email informando sobre a situação do backup Programado.


    irei testar seu codigo e posto aqui  o sucesso do mesmo!
    Muito Obrigado!


    Uma duvida:
    1MB = 1000000
    10GB = 1000000 0000 ??

    Então 10GB fica assim?

    Outra coisa, o  SQL SERVER 2005 esta instalado no E:\ 
    Fazemos Backup no C:\

    Onde posso especificar neste script acima?
    Este modelo que vc colocou, ele fica por default no mesmo lugar onde o SQLSERVER esta instalado no é, ou seja, no E:\ ?


    Abraço!
    terça-feira, 24 de março de 2009 18:44
  • Achei o comadno aqui: 

    TargetInstance.DeviceID

    Agora da erro ao tentar colocar junto a sua.

    SQLServerAgent Error: WMI error: 0x80041058.
    The @wmi_query could not be executed in the @wmi_namespace provided. Verify that an event class selected in the query exists in the namespace and that the query has the correct syntax. (.Net SqlClient Data Provider)

    SELECT * FROM __InstanceModificationEvent WITHIN 10 WHERE TargetInstance ISA "Win32_LogicalDisk" AND TargetInstance.FreeSpace < 2500000000 AND TargetInstance.DeviceID = '\"C:\"'

    terça-feira, 24 de março de 2009 19:18
  • Se não der certo usando WMI, da uma olhada nesse link:
    http://social.msdn.microsoft.com/Forums/en-US/transactsql/thread/ef204214-80f6-4288-bf1b-57d23d7feb3a/


    Ricardo Muramatsu ricardomuramatsu@hotmail.com www.muramatsu.com.br
    terça-feira, 24 de março de 2009 20:38
  • Olá,

    Como foi falado existem algumas formas de se fazer essa tarefa.

    Além disso normalmente essa atividade é feita analisando dois ítens:
    a) o espaço livre dentro do BD (para saber se será preciso aumentar os datafiles ou não)
    b) o espaço livre em disco no SO (para saber se o espaço livre é suficiente para aumentar os datafiles)

    O limite usado nesses casos pode variar de um ambiente para outro, devido as politicas locais e a taxa de crescimento do BD.

    Um exemplo usado e criar um alerta de AVISO e um de CRITICO.

    Ex.:

    SO ou BD
    AVISO se acima de 80%
    CRITICO se acima de 90%
    Alex Rosa, visite também http://www.keep-learning.com (Forum e Artigos interessantes)
    quarta-feira, 25 de março de 2009 00:31
  • Bom dia,

    Alex,

    Inicialmente o objetivo de monitorar o espaço livre do HD é devido ao Backup automatizado.
    Temos um HD que é onde os backp são salvos, mais tenho que monitorar o espaço livre dele, pq quem é responsavel em pega estes arquivos depois e compactar e salvar em DVD é outra pessoa.

    Então para que a mesma não esqueça de fazer sua parte e meu backup que é feito as 22:20hrs de erro, então deixo sobre aviso, se estiver abaixo, recebo email e durante o dia posso estar correndo atras para agilizar.

    Utilizei o WMI citado, mais não obtive resultado. criei o alert e depois coloquei o JOB para executar,  o espaço que citei foi de 25GB, abaixo que isso era para disparar um email. só que foi para 18GB e nada...

    Agora posso ter errado no calculo

    2500000000 = 25GB ?


    Obrigado pela atenção
    quarta-feira, 25 de março de 2009 12:54
  • 25GB = 25000000000

    Acho que faltou um zero no seu.

    att.
    Ricardo Muramatsu ricardomuramatsu@hotmail.com www.muramatsu.com.br
    • Marcado como Resposta Anderson.fsa quarta-feira, 25 de março de 2009 13:46
    quarta-feira, 25 de março de 2009 13:13
  •  


    USE [msdb]  
    GO  
    EXEC msdb.dbo.sp_update_alert @name=N'MonitorandoEspacoHD',   
            @message_id=0,   
            @severity=0,   
            @enabled=1,   
            @delay_between_responses=0,   
            @include_event_description_in=1,   
            @database_name=N'',   
            @notification_message=N'',   
            @event_description_keyword=N'',   
            @performance_condition=N'',   
            @wmi_namespace=N'\\.\ROOT\CIMV2',   
            @wmi_query=N'SELECT * FROM __InstanceModificationEvent WITHIN 1 WHERE TargetInstance ISA "Win32_LogicalDisk" AND TargetInstance.FreeSpace < 25000000000' 
    GO  
    EXEC msdb.dbo.sp_update_notification @alert_name=N'MonitorandoEspacoHD', @operator_name=N'Administrador banco de dados', @notification_method = 1  
    GO  
    EXEC msdb.dbo.sp_update_notification @alert_name=N'MonitorandoEspacoHD', @operator_name=N'Administrador de Rede', @notification_method = 1  
    GO  
    EXEC msdb.dbo.sp_update_notification @alert_name=N'MonitorandoEspacoHD', @operator_name=N'Suporte RM', @notification_method = 1  
    GO 


    Alguem poderia testar o codigo acima, para ver se realmente funciona.
    Aqui não foi!

    Ricardo, irei colocar e testar novamente!

    Obrigado pela atenção!

    quarta-feira, 25 de março de 2009 13:19
  • O WMI que o colega colocou e sua obsevação sobre a falta do zero resolveram...

    Muito Obrigado a todos!
    quarta-feira, 25 de março de 2009 13:47
  • Seguindo o exemplo dos amigos tentei configurar o o mesmo esquema aqui e recebi uma mensagem de erro:

    Msg 22022, Level 16, State 1, Line 0  
    SQLServerAgent Error: WMI error: 0x80041010.  
    Msg 14511, Level 16, State 1, Procedure sp_verify_alert, Line 237  
    The @wmi_query could not be executed in the @wmi_namespace provided. Verify that an event class selected in the query exists in the namespace and that the query has the correct syntax. 

    Segue o scrip que usei:
    USE [msdb]     
    GO     
    EXEC msdb.dbo.sp_add_alert      
    @name =N'DiskSpace',      
    @enabled =1,      
    @delay_between_responses =0,      
    @include_event_description_in =0,      
    @wmi_namespace =N'\\.\root\Microsoft\SqlServer\ServerEvents\MSSQLSERVER',      
    @wmi_query =N'SELECT * FROM __InstanceModificationEvent WITHIN 600 WHERE TargetInstance ISA "Win32_LogicalDisk" AND TargetInstance.FreeSpace < 25000000000' 



    Ricardo Muramatsu ricardomuramatsu@hotmail.com www.muramatsu.com.br
    quinta-feira, 26 de março de 2009 13:21
  • OLÁ Ricardo,

    parece que é simples resolver.

    Troque esta linha de comando

    @wmi_namespace =N'\\.\root\Microsoft\SqlServer\ServerEvents\MSSQLSERVER',

    PARA:

    @wmi_namespace =N'\\.\ROOT\CIMV2',

    P.S: O Namespace que vc estar utilizando é do SQL SERVER, porém o comando abaixo: Query é de especifico do sistema operacional.

    Qualquer coisa, estamos ai!

    Abraço

    quinta-feira, 26 de março de 2009 13:25
  • Opa vlw, era isso mesmo.

    Ricardo Muramatsu ricardomuramatsu@hotmail.com www.muramatsu.com.br
    quinta-feira, 26 de março de 2009 13:56
  • Pessoal,

    Estou com dúvida sobre o funcionamento do contador "number  of occurrences" ao criar um alerta tipo WMI Event Alert no SQL Server 2008.

    Criei o alerta citado acima, setando o valor do disco e setando a unidade também. Coloquei o valor pra avisar quando chegasse em 50Gb.  E coloquei o Delay between responses para 5 minutos.

    SELECT * FROM __InstanceModificationEvent WITHIN 120 WHERE TargetInstance ISA "Win32_LogicalDisk" AND TargetInstance.FreeSpace < 50000000000 AND TargetInstance.DeviceID = 'C:'

    Então ele manda e-mail e incrementa 1 ao contador.

    No caso, como o contador "number  of occurrences" funciona?Ele vai contar 1 vez a cada 5 minutos se a condição ainda estiver ok. Tipo, se eu não corrigir o problema de espaço?

    Olhei aqui e o contador já está em 8 com apenas 10 minutos desde o primeiro alerta.

    Outra dúvida referente a isso.

    Configurei para a unidade C: e E: e funciona na C: e nem sempre funciona na E:. Alguma ideia do que pode ser?

    Obrigada desde já.

    quarta-feira, 27 de junho de 2012 13:31
  • Olá,

         Onde vc está medindo esse contador? em SQL Server: Alerts?


    Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008

    quarta-feira, 27 de junho de 2012 15:34
    Moderador
  • Sim. Alertas do SQL Server - WMI Event Alert.

    Segue abaixo:

    USE [msdb]

    GO
    EXEC msdb.dbo.sp_add_alert @name=N'Monitoramento Disco E', 
    @message_id=0, 
    @severity=0, 
    @enabled=1, 
    @delay_between_responses=0, 
    @include_event_description_in=1, 
    @database_name=N'', 
    @notification_message=N'Monitorando espaço no disco E < 50GB', 
    @event_description_keyword=N'', 
    @performance_condition=N'', 
    @wmi_namespace=N'\\.\ROOT\CIMV2', 
    @wmi_query=N'SELECT * FROM __InstanceModificationEvent WITHIN 100 WHERE TargetInstance ISA "Win32_LogicalDisk" AND TargetInstance.FreeSpace < 50000000000 AND TargetInstance.DeviceID = ''E:''', 
    @job_id=N'00000000-0000-0000-0000-000000000000'
    GO
    EXEC msdb.dbo.sp_add_notification @alert_name=N'Monitoramento Disco E', @operator_name=N'DBA', @notification_method = 1
    GO

    quinta-feira, 28 de junho de 2012 16:56
  • Pessoal,

    Já consegui entender o funcionamento do contador, porém o alerta que dispara quando o espaço em disco chegou no valor que setei continua oscilando. No disco C: funciona sem problemas, mas no disco E: às vezes funciona e outras não. Alguma ideia do que pode ser?

    Se eu não especificar a unidade e setar o valor 50GB, funciona, mas se eu coloco especificando a unidade E, ele funciona uma vez , mas depois pára ou então nem funciona. Na C: funciona sem problemas.

    Any help?

    terça-feira, 3 de julho de 2012 19:01
  • Tente a proc xp_fixeddrives.

    abs;
    Luan Santos

    sexta-feira, 21 de setembro de 2012 14:17