Volume tabelas SQL

31/10/2013

oOi gente,

Preciso pegar os tamanho de todas as tabelas do sql, pra acompanhar o crescimento . Utilizo p sql express 2012;

Estou usando essa procedure
    set nocount on

  declare @vname   varchar(100)
  declare @vbase   varchar(100)
  declare @sql     varchar(max) 
  
  create table #tmpTamTabela (
    db         varchar(100) null
  , name       varchar(100) null
  , rows       int          null
  , reserved   varchar(25)  null
  , data       varchar(25)  null
  , index_size varchar(25)  null
  , unused     varchar(25)  null
   )
  
  create table #tmpTabelas (
    tabela varchar(100) null
  )
  
   declare ct cursor local fast_forward read_only for
    select name
     from master..sysdatabases
    /* ESPECIFIQUE AQUI AS EXCEÇÕES PARA CÁLCULO */ 
    where name not in ('master', 'tempdb', 'model', 'msdb')
    order by name
  
  open ct
  
  while 0 =0 
  begin
    fetch next from ct into @vbase
    if @@fetch_status <> 0 break
    
    truncate table #tmpTabelas
    
    select @sql = '
        
          insert into #tmpTabelas (tabela)
            select name
              from [' + rtrim(@vbase) + ']..sysobjects
             where type = ''U''
            
            '
    
    exec(@sql)

    declare ct1 cursor local fast_forward read_only for
      select tabela from #tmpTabelas
       order by 1
   
    open ct1
   
    while 1 = 1
    begin
      fetch next from ct1 into @vname
      if @@fetch_status <> 0 break
      
      select @sql = '
        
          insert into #tmpTamTabela (name, rows, reserved, data, index_size, unused)
            exec [' + rtrim(@vbase) + ']..sp_spaceused ''' + rtrim(@vname) + '''
            
          update #tmpTamTabela
             set db = ''' + rtrim(@vbase) + '''
           where db is null
            
	   '

      exec(@sql)
      
    end
    close ct1
    deallocate ct1    
    
  end
  close ct
  deallocate ct
  
  select db   as 'Banco'
       , name as 'Nome'
       , rows as 'Linhas'
       , convert(int, replace(reserved, ' KB','')) as 'Tamanho total'
	   , 100 * convert(int, replace(reserved, ' KB','')) / 1024 as 'Tamanho total em MB' -- Conversão para MB
       , convert(int, replace(index_size, ' KB',''))as 'Index'
       , convert(int, replace(unused, ' KB',''))as 'Não utilizado'
	  -- , convert(int, data,)
    from #tmpTamTabela
   order by db, convert(int, replace(reserved, ' KB','')) desc  



Preciso converter em MB e depois em GB, eu fiz uma contagem no select acima para converter em MB, não sei se esta certo, alguem poderia me ajudar.

Respostas

31/10/2013

Alex Lekao

Oi Simone, boa tarde!!!

o seu questionamento eh apenas com relacao ao ultimo script certo?
Responder Citar

31/10/2013

Roniere Almeida

o que esse script faz Alex em especifico?
Responder Citar

01/11/2013

Dbajr

Oi Alex, seria apenas esse select .


 select db   as 'Banco'
       , name as 'Nome'
       , rows as 'Linhas'
       , convert(int, replace(reserved, ' KB','')) as 'Tamanho total'
	   , 0,01 * (convert(decimal(10,2), replace(reserved, ' KB','')) / 1024 )  as 'Tamanho total em MB' 
       , convert(int, replace(index_size, ' KB',''))as 'Index'
       , convert(int, replace(unused, ' KB',''))as 'Não utilizado'
	  -- , convert(int, data,)
    from #tmpTamTabela
   order by db, convert(int, replace(reserved, ' KB','')) desc  
Responder Citar

01/11/2013

Alex Lekao

o que esse script faz Alex em especifico?


No caso do ultimo script que ele colocou como exemplo, vai pegar uma tabela temporaria com todos os dados coletados a partir dos outros scripts e mostrar os tamanho que ocupa em byts, mbyts, etc.. e ordena.

seria isso que vc questionou? rsrsr
Responder Citar

01/11/2013

Alex Lekao

faz um teste da seguinte maneira

adicione uma linha similar a essa

, 0,01 * (convert(decimal(10,2), replace(reserved, ' KB','')) / 1024 )  as 'Tamanho total em MB'


e faca mais uma divisao por 1024 que vc tera os gigas normalmentes, nao sei se eh isso que esta querendo.

por exemplo

(replace(reserved, ' KB','')) / 1024 ))/1024


nao fiz testes, entao deve ter que tratar mais alguma coisa... rsrsr
Responder Citar

01/11/2013

Dbajr

Alex,

eu precisava de transformar a qtde que esta em KB em MB e depois em GB.

eu fiz assim

  select db   as 'Banco'
       , name as 'Nome'
       , rows as 'Linhas'
       , convert(int, replace(reserved, ' KB','')) as 'Tamanho total'
	   , 0,01 * (convert(decimal(10,2), replace(reserved, ' KB','')) / 1024 )  as 'Tamanho total em MB' 
	   , 0,01 * (convert(decimal(10,2), replace(reserved, ' KB','')) / 1024 ) /1024 as 'Tamanho total em GB'
       , convert(int, replace(index_size, ' KB',''))as 'Index'
       , convert(int, replace(unused, ' KB',''))as 'Não utilizado'
	  -- , convert(int, data,)
    from #tmpTamTabela
   order by db, convert(int, replace(reserved, ' KB','')) desc  


Aparentemente deu certo, só preciso arrumar os campos que a mais que esse select esta retornando, se voce rodar ai no banco vai ter uma noção melhor do que estou falando. Mais agora eu gostaria de somar tudo por base , pra saber quando estiver chegando no limte delas. que no express é 10gb por base
Responder Citar

01/11/2013

Alex Lekao

OI Simone, bom dia!!!

Blz... se ta dando certo ate ai maravilha... rsrs

Aparentemente deu certo, só preciso arrumar os campos que a mais que esse select esta retornando, se voce rodar ai no banco vai ter uma noção melhor do que estou falando. Mais agora eu gostaria de somar tudo por base , pra saber quando estiver chegando no limte delas. que no express é 10gb por base


agora eu nao entendi muito bem o que vc esta querendo, vc quer isoladamente base a base? ou vc tem 5 bases e quer somar todas elas?

caso vc queira isolado, vc pode usar mais de um script, percebi que no comeco tem as exceções das bases, talvez seja isso.
Responder Citar

01/11/2013

Dbajr

Oi Alex,
Eu preciso verificar o tamanho de cada base, e arrumar um jeito de ser informada, quando estiver faltando mais ou menos uns 10% pra chegar no tamanho maximo de 10gb.
Esse script, me ajuda a ver qual tabela esta consumindo mais.

Responder Citar

01/11/2013

Alex Lekao

Oi Simone, boa tarde!!!

Entao nao sei se vc vai conseguir ser alertada sobre isso usando o SQL Express, a nao ser que vc faca uma operacao que o Jefferson indicou em outro topico.

So me esclarece uma duvida, vc consegue executar comandos SQL via prompt de comando usando o SQL Express?

talvez vc consiga montar alguma bat e deixar no agendador de tarefas do windows, so nao sei como ficariam as mensagens ou o envio do email neste caso.

talvez o ideal seja um software especificamente para fazer essa operacao, ai o mesmo deveria ser desenvolvido, eu nao conheco nenhum que ja faca isso, infelizmente.

=./
Responder Citar

01/11/2013

Jefferson Santos

Realmente o Express não tem o serviço SQL Server Agent para criação de Job e Notificação.
Responder Citar

01/11/2013

Dbajr

É, por isso que falei que vou ter que dar um jeito. rs O express é muito limitado.
Tem como sim, hoje os backup que faço, são todos por arquivo .bat.
Mais em relação ao restante voces saberiam me auxiliar?


Responder Citar

01/11/2013

Jefferson Santos

Tem como sim? Backup .bat é diferente de Job criado atraves do SQL Server Agent.
Responder Citar

01/11/2013

Dbajr

Oi Simone, boa tarde!!! Entao nao sei se vc vai conseguir ser alertada sobre isso usando o SQL Express, a nao ser que vc faca uma operacao que o Jefferson indicou em outro topico. So me esclarece uma duvida, vc consegue executar comandos SQL via prompt de comando usando o SQL Express? talvez vc consiga montar alguma bat e deixar no agendador de tarefas do windows, so nao sei como ficariam as mensagens ou o envio do email neste caso. talvez o ideal seja um software especificamente para fazer essa operacao, ai o mesmo deveria ser desenvolvido, eu nao conheco nenhum que ja faca isso, infelizmente. =./



Jefferson, o meu tem como sim, foi resposta a essa pergunta do Alex .. rs

So me esclarece uma duvida, vc consegue executar comandos SQL via prompt de comando usando o SQL Express?
Responder Citar

01/11/2013

Jefferson Santos

SQLCMD. O que eu disse é que tem diferença de Job para um comando Bat.
Responder Citar

22/11/2013

Roniere Almeida

[quote]o que esse script faz Alex em especifico?


No caso do ultimo script que ele colocou como exemplo, vai pegar uma tabela temporaria com todos os dados coletados a partir dos outros scripts e mostrar os tamanho que ocupa em byts, mbyts, etc.. e ordena.

seria isso que vc questionou? rsrsr[/quote]

sim, sim, isso mesmo.
Responder Citar