segunda-feira, 28 de maio de 2012

Usando xp_fixeddrives para monitorar o espaço livre em disco


Usando xp_fixeddrives para monitorar o espaço livre em disco

Por Gregory A. Larsen

Como um DBA uma de suas responsabilidades é monitorar disco espaço . Você sempre precisa ter certeza de que você tem o suficiente para suas bases de dados, backups de banco de dados e quaisquer outros tipos de arquivos que você pretende armazenar no seu servidor. Se você não controlar o seu espaço em disco e verifique se você tem espaço suficiente, eventualmente, um de seus processos de banco de dados críticos ou componentes vai falhar, porque não é possível alocar o espaço em disco ele precisa.

Há um número de diferentes métodos para monitorizar a utilização do espaço de disco. Não vou discutir os métodos diferentes que você poderia usar, eu só vou escrever sobre um. O método que eu vou discutir é um método de monitoramento simples espaço que usa um SQL Server em situação irregular estendido xp_fixeddrives procedimento armazenado chamado. Os xp_fixeddrives estendido procedimento armazenado retorna um conjunto de registros que contém o número de megabytes de espaço livre para cada unidade física associada com a máquina do SQL Server.
Agora é simples basta executar o comando xp_fixeddrives cada tantas vezes do Query Analyzer para analisar a quantidade de espaço livre, embora este método é muito demorado para administradores de banco de dados ocupados. Um método melhor seria automatizar executando este comando periodicamente para rever a quantidade de espaço livre. Com a aproximação automática, você pode realizar o que quer que você achar mais adequado com as informações de espaço livre. Eu posso pensar de um casal de diferentes tarefas de DBA, onde informações de espaço livre pode ser valioso. A primeira coisa seria alertar o DBA quando o espaço livre cai abaixo de um limite específico em qualquer unidade do SQL Server, ea segunda seria a de acompanhar historicamente o espaço livre em disco para o gerenciamento da capacidade do espaço.
Primeiro, vamos olhar como construir um processo para alertar o DBA quando qualquer uma das unidades de disco do SQL Server cai abaixo de um determinado limite. Para utilizar as informações xp_fixeddrives neste processo automatizado alertando que eu preciso para obter as informações emitidas pelos procedimentos de armazenamento prolongados em uma tabela SQL Server ou variáveis ​​de aplicativo, para que eu possa programaticamente tomar decisões sobre se uma unidade já passou do limite de espaço livre. Para obter as informações xp_fixeddrives em uma tabela temporária eu uso o seguinte T-SQL.

create table #FreeSpace(
 Drive char(1), 
 MB_Free int)

insert into #FreeSpace exec xp_fixeddrives
Como você pode ver, eu criei uma tabela temporária chamada # FreeSpace para inserir os registros que xp_fixeddrives saídas. Esta tabela temporária é então preenchida quando o "insert into" instrução é executada. Agora esse código por si só não alertar o DBA, embora não obter as informações de espaço livre para cada unidade em sua caixa de SQL Server em uma tabela temporária onde algum código T-SQL pode processá-lo para alertar o DBA.
O método que estou usando para controlar o processo de alerta de limite é um trabalho do SQL Agent que é executado de hora em hora. Cada hora o trabalho do agente SQL Server coleta as informações de espaço livre para cada unidade do SQL Server em uma tabela temporária, como o descrito acima. Então, para cada unidade de eu recuperar as informações de espaço livre a partir desta tabela temporária e compará-lo a um limiar que definiu para cada unidade. Se a quantidade de espaço livre cai abaixo do limiar de configuração especial para a unidade, então eu enviar e-mail do DBA usando xp_sendmail. Aqui está um exemplo de algum código que faz exatamente isso.

declare @MB_Free int

create table #FreeSpace(
 Drive char(1), 
 MB_Free int)

insert into #FreeSpace exec xp_fixeddrives

select @MB_Free = MB_Free from #FreeSpace where Drive = 'C'

-- Free Space on C drive Less than Threshold
if @MB_Free < 1024
  exec master.dbo.xp_sendmail 
     @recipients ='greg.larsen@netzero.net',
     @subject ='SERVER X - Fresh Space Issue on C Drive',
     @message = 'Free space on C Drive 
                 has dropped below 1 gig'

select @MB_Free = MB_Free from #FreeSpace where Drive = 'F'

-- Free Space on F drive Less than Threshold
if @MB_Free < 2048 
   exec master.dbo.xp_sendmail 
     @recipients ='greg.larsen@netzero.net',
     @subject ='SERVER X - Fresh Space Issue on C Drive',
     @message = 'Free space on F Drive 
                 has dropped below 2 gig'
Este exemplo apenas verifica o espaço livre em dois discos, mas poderia facilmente ser modificado para lidar com unidades adicionais. Esse código de exemplo pode ser colocado diretamente em uma etapa de trabalho do SQL Agent, ou pode ser construído em um procedimento armazenado que é executado por uma etapa de trabalho. Ao construir um trabalho de agente do SQL Server para executar o código acima, o DBA será notificado logo após uma unidade atinge o seu limite de espaço designado livre.Este alertando de espaço livre baixo esperança de permitir que o tempo de DBA para resolver o problema de espaço livre antes torna-se crítico, e faz com que os processos a falhar. Note-se que o código acima tem um limite de espaço livre diferente para cada unidade.

Outro uso do xp_fixeddrives poderia ser a de controlar o uso de espaço em disco ao longo do tempo. Diga-lhe para onde se reúnem as informações de espaço livre em intervalos regulares, por exemplo, semanal, e armazená-lo em uma tabela de banco de dados. Isso poderia ser feito usando o método acima para preencher a tabela # FreeSpace temporária. Ao reunir informações sobre o espaço livre ao longo do tempo e armazená-lo em uma tabela permanente do SQL Server, você será capaz de produzir um gráfico de tendência, mostrando seu disco de horas extras consumo de espaço. Ao comparar a quantidade de espaço livre entre dois pontos no gráfico que será capaz de determinar o espaço de disco consumido entre os intervalos. Ter a taxa de consumo de espaço em disco é valioso no rastreamento quão rápido as suas aplicações estão consumindo seu espaço de disco livre disponível. Esta informação taxa de crescimento é importante para determinar quanto espaço em disco é necessário para suportar suas aplicações para o próximo ano.

Monitoramento de espaço em disco disponível e as taxas de crescimento são um par de coisas que um DBA deve ser espetáculo. Sem o acompanhamento você corre o risco de ficar sem espaço e causando problemas críticos para a sua aplicação. Caso você não tenha vindo a acompanhar a disponibilidade de espaço em disco e uso, então você pode considerar como você pode usar xp_fixeddrives para apoiar as necessidades do seu monitor.

Nenhum comentário:

Postar um comentário