Sql Server tabelas imensas sem linhas

5

Eu tenho um banco de dados do Sql Server que tem algumas tabelas com contagem de linhas zero, mas ocupa 10 GB de espaço combinados. Eu posso ver isso clicando com o botão direito do mouse / properties nas tabelas em questão (o espaço de dados é enorme, entre 1 e 6 GB, e a contagem de linhas é zero nessas tabelas). Eu não tenho idéia do que poderia estar causando isso como eu diria que zero linhas significaria quase zero espaço ocupado.

Alguma idéia?

    
por Mike Gates 01.12.2009 / 15:22

6 respostas

3

Reconstrua todos os índices nas tabelas, incluindo o índice clusterizado. De Livros on-line :

Rebuilding an index drops and re-creates the index. This removes fragmentation, reclaims disk space by compacting the pages based on the specified or existing fill factor setting, and reorders the index rows in contiguous pages.

Algo como:

ALTER INDEX ALL ON [lc_db_user].[JMS_MESSAGES] REBUILD

DBCC SHRINKDATABASE ou (mais preferencialmente) DBCC SHRINKFILE só fará algo se o espaço tiver sido liberado da própria tabela. Além disso, verifique se você está familiarizado com os problemas associados ao encolhimento arquivos de banco de dados . O resumo executivo: NUNCA use o recurso de encolhimento automático, apenas reduza os arquivos quando necessário e sempre faça um acompanhamento completo com a reindexação para desfragmentar todos os índices que você acabou de fragmentar.

    
por 01.12.2009 / 17:42
1

Outra maneira de lidar com esse tipo de problema é usar a instrução TRUNCATE TABLE:

TRUNCATE TABLE [lc_db_usr].[JMS_MESSAGES]

Isso, no entanto, só funciona em tabelas não referenciadas por uma restrição FOREIGN KEY.

Para mais detalhes: link

    
por 28.07.2010 / 09:55
0

Se o banco de dados contiver muitas linhas de dados, esses dados serão excluídos das tabelas, o mecanismo de banco de dados não reduzirá os arquivos. Existem comandos para fazer isso, vou ter que procurá-los.

ATUALIZAÇÃO: Um que eu usei no passado é o DBCC SHRINKDATABASE, você pode encontrar detalhes do TechNet aqui

    
por 01.12.2009 / 15:26
0

Não consigo postar uma captura de tela, mas o que eu faço é clicar com o botão direito do mouse na tabela, ir para propriedades e em "Armazenamento":

Data space: 2,152.883 MB
FileGroup: PRIMARY
Index space: 0.063 MB
Partition scheme: 
Row count: 0
Table is partitioned: False
Text filegroup: PRIMARY

Quando faço SELECT * na tabela, não obtenho resultados.

Aqui está o script CREATE (há um campo de imagem lá):

CREATE TABLE [lc_db_usr].[JMS_MESSAGES](
 [MESSAGEID] [int] NOT NULL,
 [DESTINATION] [varchar](150) NOT NULL,
 [TXID] [int] NULL,
 [TXOP] [char](1) NULL,
 [MESSAGEBLOB] [image] NULL,
PRIMARY KEY CLUSTERED 
(
 [MESSAGEID] ASC,
 [DESTINATION] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    
por 01.12.2009 / 16:04
0

Isso é um pouco estranho, mas funciona:

Insira uma coluna fictícia como a primeira coluna da sua tabela e salve a tabela.

Por fim, exclua a nova coluna e salve a tabela novamente.

Agora você certamente terá 0 bytes usados.

Noel Paricollo

    
por 04.05.2010 / 19:48
0

tente isto:

alter table table_name rebuild;
    
por 24.01.2017 / 21:58