Array
(
)

Volume tabelas SQL

Dbajr
   - 31 out 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
#Código

    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.

Alex Lekao
   - 31 out 2013

Oi Simone, boa tarde!!!

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

Roniere Almeida
   - 31 out 2013

o que esse script faz Alex em especifico?

Dbajr
   - 01 nov 2013

Oi Alex, seria apenas esse select .

#Código

 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  

Alex Lekao
   - 01 nov 2013


Citação:
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

Alex Lekao
   - 01 nov 2013

faz um teste da seguinte maneira

adicione uma linha similar a essa

#Código

, 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

#Código
(replace(reserved, ' KB','')) / 1024 ))/1024


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

Dbajr
   - 01 nov 2013

Alex,

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

eu fiz assim

#Código

  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

Alex Lekao
   - 01 nov 2013

OI Simone, bom dia!!!

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

Citação:
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.

Dbajr
   - 01 nov 2013

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.

Alex Lekao
   - 01 nov 2013

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 Santos
   - 01 nov 2013

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

Dbajr
   - 01 nov 2013

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

Jefferson Santos
   - 01 nov 2013

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

Dbajr
   - 01 nov 2013


Citação:
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?

Jefferson Santos
   - 01 nov 2013

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

Roniere Almeida
   - 22 nov 2013


Citação:

Citação:
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.

Alex Lekao
   - 22 nov 2013


Citação:

Citação:

Citação:
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.


blz entao... rsrsr

eh isso ae que o script faz... rsrsr

Roniere Almeida
   - 24 nov 2013

obrigado.