Volume tabelas SQL

31/10/2013

0

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.
Simone

Simone

Responder

Posts

31/10/2013

Alex Lekao

Oi Simone, boa tarde!!!

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

31/10/2013

Roniere Almeida

o que esse script faz Alex em especifico?
Responder

01/11/2013

Simone

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

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

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

01/11/2013

Simone

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

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

01/11/2013

Simone

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

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

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

01/11/2013

Simone

É, 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

01/11/2013

Jefferson Santos

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

01/11/2013

Simone

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

01/11/2013

Jefferson Santos

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

22/11/2013

Roniere Almeida

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


sim, sim, isso mesmo.
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar