Compattare un database

Si applica a: SQL Server Azure SQL DatabaseIstanza gestita di SQL di Azure

Questo articolo descrive come compattare un database in SQL Server usando Esplora oggetti in SQL Server Management Studio o Transact-SQL.

Compattando i file di dati si recupera spazio spostando le pagine di dati dalla fine del file allo spazio non occupato più vicino all'inizio del file. Quando alla fine del file viene creato sufficiente spazio libero, le pagine di dati possono essere deallocate e restituite al file system.

Limitazioni e restrizioni

  • Il database non può essere ridotto rispetto alle dimensioni minime del database. La dimensione minima è la dimensione specificata quando il database è stato originariamente creato o l'ultima dimensione esplicita impostata usando un'operazione di modifica delle dimensioni dei file, ad esempio DBCC SHRINKFILE. Pertanto, se originariamente è stato creato un database con dimensioni pari a 10 MB e le dimensioni sono aumentate fino a 100 MB, è possibile compattare il database fino a un minimo di 10 MB, anche se tutti i dati nel database sono stati eliminati.

  • Non è possibile compattare un database mentre ne viene eseguito il backup e non è possibile eseguire il backup di un database mentre è in corso un'operazione di compattazione.

Consigli

  • Per visualizzare la quantità corrente di spazio disponibile, cioè non allocato, nel database. Per altre informazioni, vedere Visualizzare le informazioni sullo spazio allocato ai dati e ai log per un database

  • Quando si pianifica la compattazione di un database, considerare le informazioni seguenti:

    • Un'operazione di compattazione è più efficace dopo un'operazione che crea una grande quantità di spazio di archiviazione inutilizzato, ad esempio un'istruzione DELETE di grandi dimensioni, una tabella tronca o un'operazione di tabella a discesa.

    • La maggior parte dei database richiede spazio disponibile per lo svolgimento delle normali attività quotidiane. Se si compatta ripetutamente un database e si noti che le dimensioni del database aumentano di nuovo, questo indica che lo spazio disponibile è necessario per le operazioni regolari. In questi casi è inutile compattare ripetutamente il database. Gli eventi di aumento automatico necessari per aumentare le prestazioni dei file di database.

    • L'operazione di compattazione generalmente aumenta la frammentazione degli indici del database. Questo è un ulteriore motivo per evitare di compattare ripetutamente un database.

    • Se non è necessario soddisfare esigenze specifiche, non impostare l'opzione di database AUTO_SHRINK su ON.

Autorizzazioni

È richiesta l'appartenenza al ruolo predefinito del server sysadmin o al ruolo predefinito del database db_owner .

Commenti

Le operazioni di compattazione in corso possono bloccare altre query nel database e possono essere bloccate dalle query già in corso. Introdotta in SQL Server 2022 (16.x), le operazioni di database di compattazione hanno un'opzione di WAIT_AT_LOW_PRIORITY. Questa funzionalità è una nuova opzione aggiuntiva per DBCC SHRINKDATABASE e DBCC SHRINKFILE. Se una nuova operazione di compattazione in modalità WAIT_AT_LOW_PRIORITY non riesce a ottenere i blocchi necessari a causa di una query a esecuzione prolungata già in corso, l'operazione di compattazione verrà infine timeout dopo un minuto e l'uscita in modo silenzioso, impedendo che altre query vengano bloccate. Per altre informazioni, vedere DBCC SHRINKDATABASE.

Usare SQL Server Management Studio

Compattare un database

  1. In Esplora oggetti connettersi a un'istanza del motore di database di SQL Server e, successivamente, espanderla.

  2. Espandere Database, quindi fare clic con il pulsante destro del mouse sul database che si vuole compattare.

  3. Fare clic su Attività, scegliere Compattare e quindi selezionare Database.

    • Database

      Consente di visualizzare il nome del database selezionato.

    • Spazio allocato

      Consente di visualizzare lo spazio totale utilizzato e inutilizzato per il database selezionato.

    • Spazio disponibile

      Consente di visualizzare lo spazio disponibile totale nei file di log e di dati del database selezionato.

    • Riorganizza i file prima di rilasciare lo spazio inutilizzato

      La selezione di questa opzione equivale all'esecuzione di DBCC SHRINKDATABASE specificando la percentuale di compattazione. Deselezionare l'opzione equivale all'esecuzione di DBCC SHRINKDATABASE con l'opzione TRUNCATEONLY. Per impostazione predefinita, questa opzione non è selezionata quando viene aperta la finestra di dialogo. Se viene selezionata, l'utente deve specificare la percentuale di compattazione.

    • Spazio massimo disponibile nei file dopo la compattazione

      Immettere la massima percentuale di spazio che si desidera sia disponibile nei file del database dopo la compattazione del database. I valori consentiti sono compresi tra 0 e 99.

  4. Selezionare OK.

Usare Transact-SQL

Compattare un database

  1. Connettersi al motore di database.

  2. Nella barra Standard selezionare Nuova query.

  3. Copiare e incollare l'esempio seguente nella finestra di query e selezionare Esegui. Questo esempio usa DBCC SHRINKDATABASE per ridurre le dimensioni dei file di dati e di log nel UserDB database e per consentire 10 la percentuale di spazio libero nel database.

DBCC SHRINKDATABASE (UserDB, 10);
GO

Completamento: Dopo la compattazione di un database

I dati spostati per ridurre un file possono essere dispersi in qualsiasi percorso disponibile nel file, provocando la frammentazione dell'indice e rallentando le prestazioni di query che eseguono ricerche in un intervallo dell'indice Per eliminare la frammentazione, valutare la possibilità di ricompilare gli indici sul file dopo la compattazione. Per altre informazioni, vedere Ricompilare un indice.

Vedi anche

Passaggi successivi