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.