Sql Server enormi tabelle senza righe

Ho un database del server SQL che dispone di poche tabelle con un numero di righe zero, ma occupa un totale di 10 GB di spazio. Lo vedo facendo clic destro / properties; sulle tabelle in questione (lo spazio dei dati è enorme, tra 1 e 6 GB e il count delle righe è zero su queste tabelle). Non ho idea di ciò che potrebbe causare questo problema, come suppongo che zero righe avrebbero significato lo spazio quasi zero prese.

Qualche idea?

  • SQL Server 2005 e Caching
  • Creare una traccia SQL senza utilizzare SQL Profiler
  • Modalità di stima del tempo per eseguire un database ridotto in SQL Server
  • Ottimizzazione di disco I / O e RAID su Windows SQL Server 2005
  • SQL Server 2000/2005 l'elenco degli utenti di accesso di elenco
  • Elenco di cose da controllare prima di triggersre SQL Server CLR?
  • 6 Solutions collect form web for “Sql Server enormi tabelle senza righe”

    Ribuild tutti gli indici delle tabelle, incluso l'indice cluster. Dalle Libri in linea :

    Ricostruendo una goccia di indice e ricreata l'indice. Ciò rimuove la frammentazione, recupera lo spazio su disco comprimendo le pagine in base all'impostazione del fattore di riempimento specificato o esistente e riorganizza le righe di indice in pagine contigue.

    Qualcosa di simile a:

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

    DBCC SHRINKDATABASE o (più preferito) DBCC SHRINKFILE farà solo qualcosa se lo spazio è stato effettivamente liberato dalla tabella stessa. Accertarsi inoltre di avere familiarità con le problematiche associate ai file di database di restringimento . Il riepilogo esecutivo: MAI non utilizzare automaticamente la restrizione, riducendo i file solo se necessario e seguendo sempre un reindex completo per deframmentare tutti gli indici che hai appena frammentato.

    Se il database conteneva molte righe di dati, i dati sono stati eliminati dalle tabelle, il motore di database non ridurrà i file. Ci sono comandi per farlo, dovrò cercare loro.

    UPDATE: Uno che ho usato in passato è DBCC SHRINKDATABASE, qui puoi trovare i dettagli di TechNet

    Non riesco a pubblicare uno screenshot, ma quello che faccio è fare clic con il button destro del mouse sulla tabella, passare alle properties; e in "Memorizzazione":

     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 faccio SELECT * sul tavolo non ottengo risultati.

    Ecco lo script CREATE (c'è un field image)

     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] 

    Questo è un po 'strano ma funziona:

    Inserisci una colonna fittizia come prima colonna della tabella, quindi salva la tabella.

    Infine, eliminare la nuova colonna e salvare nuovamente la tabella.

    Ora avrai sicuramente 0 byte utilizzati.

    Noel Paricollo

    Un altro modo per affrontare questo tipo di problema è usare l'istruzione TRUNCATE TABLE:

     TRUNCATE TABLE [lc_db_usr].[JMS_MESSAGES] 

    Ciò tuttavia funziona solo su tavole non referenziate da un vincolo FOREIGN KEY.

    Per ulteriori informazioni: http://msdn.microsoft.com/en-us/library/ms177570.aspx

    prova questo:

     alter table table_name rebuild; 
    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.