Loading…

Queries do Dia a Dia – Monitorando o Crescimento de Tabelas e Bases no SQL Server

Olá Pessoal,

Hoje vou compartilhar com vocês um Script que utilizo em todos os clientes que realizo um monitoramento diário do SQL Server.

É um script que irá armazenar diariamente o tamanho das tabelas de todas as bases de dados e, com isso, você conseguirá monitorar o quanto suas tabelas e base estão crescendo por dia, por mês ou por ano.

Essa informação é fundamental para você realizar um planejamento de espaço em disco do seu ambiente e definir quando será necessário realizar um novo investimento na compra de mais disco.

Para criar essa rotina, basta abrir o arquivo abaixo na base que deseja criar esse log e executar o script:

Historico_Tamanho_Tabelas

 

O script vai criar as tabelas abaixo:

  • BaseDados
  • Tabela
  • Servidor
  • Historico_Tamanho_Tabela

A view para facilitar a visualização das informações:

  • vwTamanho_Tabela

E a procedure que fará a carga dos dados nas Tabelas:

  • stpCarga_Tamanhos_Tabelas

Depois de executar o script, basta criar um job para executar a procedure stpCarga_Tamanhos_Tabelas diariamente.

Após executado, você pode conferir o tamanho das suas maiores tabelas com o Script abaixo:

SELECT top 10 *
FROM vwTamanho_Tabela
ORDER BY Nr_Tamanho_Total desc

Resultado:

Com essa informação sendo armazenada de forma diária no seu banco de dados, agora vai da criatividade de cada um para montar as queries e relatórios que precisam.

A informação está aí, é visualizar da forma que acha melhor montando uma consulta na view vwTamanho_Tabela.

É com essa rotina que gero as informações abaixo no meu CheckList diário do Banco de dados:

É um script simples, mas já está aí prontinho para vocês utilizarem. Ele é de grande ajuda para o DBA no seu Dia a Dia.

Gostou dessa dica?

Cadastre seu e-mail para receber novos Posts e curta minha Página no Facebook para receber Dicas de Leituras e Eventos sobre SQL Server.

Aprenda a criar essa e outras rotinas para administrar melhor seu SQL Server no meu Treinamento de Tarefas do Dia a Dia de um DBA.

Abraços,

Fabrício Lima

MCITP – Database Administrator

Consultor e Instrutor SQL Server

Trabalha com SQL Server desde 2006

16 thoughts on “Queries do Dia a Dia – Monitorando o Crescimento de Tabelas e Bases no SQL Server

  1. Segue um exemplo de query para analisarem o histórico:

    SELECT B.Nm_Servidor, Nm_Database,Nm_Tabela,
    SUM(CASE WHEN Dt_Referencia = CONVERT(VARCHAR, GETDATE() ,112) THEN A.Nr_Tamanho_Total ELSE 0 END) Tamanho_Atual,
    SUM(CASE WHEN Dt_Referencia = CONVERT(VARCHAR, GETDATE()-1 ,112) THEN A.Nr_Tamanho_Total ELSE 0 END) Tamanho_1_dia,
    SUM(CASE WHEN Dt_Referencia = CONVERT(VARCHAR, GETDATE()-15 ,112) THEN A.Nr_Tamanho_Total ELSE 0 END) Tamanho_15_dia,
    SUM(CASE WHEN Dt_Referencia = CONVERT(VARCHAR, GETDATE()-30 ,112) THEN A.Nr_Tamanho_Total ELSE 0 END) Tamanho_30_dia,
    SUM(CASE WHEN Dt_Referencia = CONVERT(VARCHAR, GETDATE()-60 ,112) THEN A.Nr_Tamanho_Total ELSE 0 END) Tamanho_60_dia
    FROM dbo.Historico_Tamanho_Tabela A
    JOIN dbo.Servidor B ON A.Id_Servidor = B.Id_Servidor
    JOIN dbo.Tabela C ON A.Id_Tabela = C.Id_Tabela
    JOIN dbo.BaseDados D ON A.Id_BaseDados = D.Id_BaseDados
    WHERE A.Dt_Referencia IN (CONVERT(VARCHAR,GETDATE(),112), CONVERT(VARCHAR,GETDATE()-1,112), CONVERT(VARCHAR,GETDATE()-15,112), CONVERT(VARCHAR, GETDATE()-30 ,112), CONVERT(VARCHAR, GETDATE()-60 ,112) ) –Hoje, 1 dia, 15 dias, 30 dias, 60 dias
    GROUP BY B.Nm_Servidor, Nm_Database,Nm_Tabela
    ORDER BY Tamanho_Atual desc

  2. Parabéns Fabrício pelos os post. Só me diga uma coisa, os dados você informa que carrega para um arquivo. Pela imagem parece que usa excel. Em caso que não é permitido exportar os dados para o excel somente broffice ou não tem nenhum dos dois app instalado no servidor. Como você atual?

    Abraços!

  3. Amigo, Parabéns pelo seu post muito bom. Agora tentei executar no meu servidor de SQL e esta dando este erro e não sei como solucionar?

    (383 row(s) affected)
    Msg 468, Level 16, State 9, Procedure stpCarga_Tamanhos_Tabelas, Line 87
    Cannot resolve the collation conflict between “Latin1_General_CI_AI” and “Latin1_General_CI_AS” in the equal to operation.
    Msg 2809, Level 18, State 1, Line 2
    The request for procedure ‘vwTamanho_Tabela’ failed because ‘vwTamanho_Tabela’ is a view object.

    Esse erro acontece após executar o comando para gravar os dados das tabelas. exec stpCarga_Tamanhos_Tabelas;

  4. Fabricio, tudo bom?
    Ao executar o processo na Master, eu percebi que ele já cria a rotina para todas as databases do server, certo?
    Obrigado!

  5. Bom dia Fabricio,

    Podes enviar-me a Query SQL que mostra as consultas que mais consomem CPU no banco de dados QSL Server… Preciso monitorizar uma Stored procedure para não causar problemas de performance no meu banco de dados.

  6. Fiz uma pequena alteração no codigo as minhas necessidades para quem deseja, na tabela de tabelas, alterei para DATETIME ( querendo pegar a data e a hora e minutos que foi coletado, ) e na procedure alterei o procedimento gETDATE(), 112 para 20 , para poder carregar o time correto, devido rodar minha job a cada 6 horas, meu banco de dados tem um crescimento fora do comum apos a migração para 2016 vindo de um 2014, então preciso detectar em um tempo menor, fica a dica para quem precisar também!

Deixe uma resposta

%d blogueiros gostam disto: