Volume tabelas SQL
31/10/2013
0
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
Posts
31/10/2013
Alex Lekao
o seu questionamento eh apenas com relacao ao ultimo script certo?
01/11/2013
Simone
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
01/11/2013
Alex Lekao
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
01/11/2013
Alex Lekao
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
01/11/2013
Simone
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
01/11/2013
Alex Lekao
Blz... se ta dando certo ate ai maravilha... rsrs
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.
01/11/2013
Simone
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.
01/11/2013
Alex Lekao
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.
=./
01/11/2013
Jefferson Santos
01/11/2013
Simone
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?
01/11/2013
Jefferson Santos
01/11/2013
Simone
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?
01/11/2013
Jefferson Santos
22/11/2013
Roniere Almeida
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.
Clique aqui para fazer login e interagir na Comunidade :)