MS SQL - Distribuição de espaços

AwakE

Banido
Isto não é bem uma dúvida de programação mas estou com um pequeno problema. Tenho uma base de dados em SQL Server que está a crescer para além do que é razoável e não percebo porquê.

Existe alguma maneira facil de saber o tamanho das tabelas para perceber qual é que me está a lixar? É que são mais de 1000 tabelas, ver uma a uma é impossível.
 
Qual a versão do SQL?

Anyway, separar tabelas de uma base de dados para as colocar num sitio diferente... Não me cheira.

O que podes fazer para "remediar" a solução é meter os data files numa drive, e os log files noutra. Isto para SQL2005, já não me lembro se podes ou não fazer o mesmo em 2000.

Meti aqui o remediar entre "" porque o indicado é colocar estes dois ficheiros em drives físicas diferentes, mas isso é outra história :)

Anyway, espero ter ajudado... Se não, tenta explicar um pouco mais o teu setup de máquina e SQL e afins.

Quanto ao crescer para além do esperado é o corportamento "normal". Depende como tens configurado o transaction log da mesma.
Para teres umas dicas de coisas que podes fazer, dá uma vista de olhos em http://sqlserver2000.databases.aspfaq.com/how-do-i-reclaim-space-in-sql-server.html
 
Eu não quero separar a base de dados, simplesmente quero saber quais as tabelas que estão a crescer demais, para a seguir ir tentar perceber a causa deste crescimento (fora do SQL).

Vou ver as dicas do transaction log, tks.

PS: Eu nem sequer sou administrador de bases de dados, mas o gajo que supostamente era responsável não faz nada....se não me safo sozinho estou tramado.
 
Vou tentar arranjar-te um script que te consiga saber todas as tabelas, e qual o número de registo por tabela, duma forma ordenada.

No entanto uma dada tabela ter um milhao de registos não quer dizer que ocupe mais que uma tabela com 10 registos... Depende muito do tipo de dados de cada registo.
 
Tenta correr esta query, vai dar-te uma ideia do numero de registos por tabela...

Não sei se ajuda, mas espero que sim.

Código:
use nome_base_dados

create table #temp (tname nvarchar(256), trecords int)

declare mycursor cursor fast_forward for
select name
from dbo.sysobjects
where xtype = 'U' order by name

declare @tablename sysname
open mycursor

fetch next from mycursor into @tablename

while (@@fetch_status = 0)
begin

insert into #temp exec ('select ''' + @tablename + ''', count(*) from ' + @tablename)

fetch next from mycursor into @tablename
end
close mycursor
deallocate mycursor

select * from #temp order by trecords desc

drop table #temp
 
Já estive a ver o tamanho dos ficheiros e o LDF está pequeno. Não percebo muito disto mas acho que é o log né?

O MDF é que tem 2 GB :(

Obrigado pelo script, vou dar aos meus colegas para ver se eles descobrem alguma coisa com isso.
 
Back
Topo