2013-01-24 7 views
11

Ho un database di test con 1 tabella con circa 50 milioni di record. La tabella inizialmente aveva 50 colonne. La tabella non ha indici. Quando eseguo la procedura "sp_spaceused" ottengo "24733.88 MB" come risultato. Ora per ridurre la dimensione di questo database, rimuovo 15 colonne (principalmente colonne int) ed eseguo lo "sp_spaceused", ottengo comunque "24733.88 MB" come risultato.L'eliminazione della colonna non riduce le dimensioni del database

Perché la dimensione del database non si riduce dopo aver rimosso così tante colonne? Mi sto perdendo qualcosa qui?

Edit: Ho provato database di contrazione, ma non ha aiutato neanche

risposta

19

provare ad eseguire il seguente comando:

DBCC CLEANTABLE ('dbname', 'yourTable', 0) 

Sarà lo spazio libero da cadute colonne di lunghezza variabile in tabelle o viste indicizzate. Maggiori informazioni qui DBCC CLEANTABLE e qui Space used does not get changed after dropping a column

Inoltre, come correttamente indicato sul collegamento pubblicato sul primo commento a questa risposta. Dopo aver eseguito il comando DBCC CLEANTABLE, è necessario REBUILD il tuo indice cluster nel caso in cui la tabella ne abbia uno, per recuperare lo spazio.

ALTER INDEX IndexName ON YourTable REBUILD 
+1

Ho trovato una soluzione simile a questo link: http://stackoverflow.com/questions/807579/how-to-reduce-size-of-sql-server-table-that-grew-from-a-datatype-change Lo sto provando ora! Grazie! – Vinod

+0

@Vinod, se fosse utile non dimenticare di spuntare il segno di spunta in modo che altri possano essere sicuri che fosse la risposta corretta. – Yaroslav

+0

Bene, ho eseguito la query e il database è cresciuto a 45 GB. Ho eseguito di nuovo il database di riduzioni, quindi è tornato al 24733.88 MB originale. Non sono sicuro di cosa stia succedendo !!! :-( – Vinod

1

La dimensione del database non si restringono semplicemente perché avete eliminato gli oggetti. Il server database di solito contiene lo spazio bonificato da utilizzare per successivi inserimenti di dati o nuovi oggetti.

Per recuperare lo spazio liberato, è necessario ridurre il file del database. Vedi How do I shrink my SQL Server Database?

+0

Come ho detto nella mia modifica, ho già provato restringimento mio database e file di registro. Non ha aiutato! – Vinod

3

Quando una colonna di lunghezza variabile viene eliminata dalla tabella, non riduce la dimensione della tabella. Le dimensioni della tabella rimangono invariate finché gli indici non vengono riorganizzati o ricostruiti.

C'è anche il comando DBCC DBCC CLEANTABLE, che può essere utilizzato per recuperare qualsiasi spazio precedentemente occupato con colonne di lunghezza variabile. Ecco la sintassi:

DBCC CLEANTABLE ('MyDatabase','MySchema.MyTable', 0)WITH NO_INFOMSGS; 
GO 

Raj

Problemi correlati