Compattare un databaseShrink a Database

In questo argomento si illustra come compattare un database mediante Esplora oggetti in SQL Server 2017SQL Server 2017 utilizzando SQL Server Management StudioSQL Server Management Studio o Transact-SQLTransact-SQL.This topic describes how to shrink a database by using Object in SQL Server 2017SQL Server 2017 by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-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.Shrinking data files recovers space by moving pages of data from the end of the file to unoccupied space closer to the front of the file. Quando alla fine del file viene creato sufficiente spazio libero, le pagine di dati possono essere deallocate e restituite al file system.When enough free space is created at the end of the file, data pages at end of the file can be deallocated and returned to the file system.

Contenuto dell'argomentoIn This Topic

Prima di iniziare Before You Begin

Limitazioni e restrizioni Limitations and Restrictions

  • Non è possibile ridurre il database a dimensioni inferiori a quelle minime.The database cannot be made smaller than the minimum size of the database. Le dimensioni minime corrispondono alle dimensioni specificate quando il database è stato inizialmente creato o alle ultime dimensioni impostate in modo esplicito mediante un'operazione di modifica delle dimensioni dei file, ad esempio DBCC SHRINKFILE.The minimum size is the size specified when the database was originally created, or the last explicit size set by using a file-size-changing operation, such as 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.For example, if a database was originally created with a size of 10 MB and grew to 100 MB, the smallest size the database could be reduced to is 10 MB, even if all the data in the database has been deleted.

  • Non è possibile compattare un database mentre ne viene eseguito il backupYou cannot shrink a database while the database is being backed up. e non è possibile eseguire il backup di un database mentre è in corso un'operazione di compattazione.Conversely, you cannot backup a database while a shrink operation on the database is in process.

  • Se viene rilevato un indice columnstore ottimizzato in memoria xVelocity, DBCC SHRINKDATABASE avrà esito negativo.DBCC SHRINKDATABASE will fail when it encounters an xVelocity memory optimized columnstore index. L'operazione avrà esito positivo se completata prima del rilevamento dell'indice columnstore ottenendo dimensioni del database inferiori.Work completed before encountering the columnstore index will succeed so the database might be smaller. Per completare DBCC SHRINKDATABASE, disabilitare tutti gli indici columnstore prima di eseguire DBCC SHRINKDATABASE, quindi ricompilare gli indici columnstore.To complete DBCC SHRINKDATABASE, disable all columnstore indexes before executing DBCC SHRINKDATABASE, and then rebuild the columnstore indexes.

Indicazioni Recommendations

  • Per visualizzare la quantità corrente di spazio disponibile, cioè non allocato, nel database.To view the current amount of free (unallocated) space in the database. Per altre informazioni, vedere Display Data and Log Space Information for a DatabaseFor more information, see Display Data and Log Space Information for a Database

  • Quando si pianifica la compattazione di un database, considerare le informazioni seguenti:Consider the following information when you plan to shrink a database:

    • Un'operazione di compattazione è più efficace dopo l'esecuzione di un'operazione che crea una quantità elevata di spazio inutilizzato, ad esempio il troncamento o l'eliminazione di una tabella.A shrink operation is most effective after an operation that creates lots of unused space, such as a truncate table or a drop table operation.

    • La maggior parte dei database richiede spazio disponibile per lo svolgimento delle normali attività quotidiane.Most databases require some free space to be available for regular day-to-day operations. Se si compatta ripetutamente un database ma le sue dimensioni aumentano di nuovo significa che lo spazio compattato è necessario per le normali operazioni.If you shrink a database repeatedly and notice that the database size grows again, this indicates that the space that was shrunk is required for regular operations. In questi casi è inutile compattare ripetutamente il database.In these cases, repeatedly shrinking the database is a wasted operation.

    • L'operazione di compattazione generalmente aumenta la frammentazione degli indici del database.A shrink operation does not preserve the fragmentation state of indexes in the database, and generally increases fragmentation to a degree. Questo è un ulteriore motivo per evitare di compattare ripetutamente un database.This is another reason not to repeatedly shrink the database.

    • Se non è necessario soddisfare esigenze specifiche, non impostare l'opzione di database AUTO_SHRINK su ON.Unless you have a specific requirement, do not set the AUTO_SHRINK database option to ON.

Sicurezza Security

Autorizzazioni Permissions

È richiesta l'appartenenza al ruolo predefinito del server sysadmin o al ruolo predefinito del database db_owner .Requires membership in the sysadmin fixed server role or the db_owner fixed database role.

Utilizzo di SQL Server Management Studio Using SQL Server Management Studio

Per compattare un databaseTo shrink a database

  1. In Esplora oggetticonnettersi a un'istanza del Motore di database di SQL ServerSQL Server Database Engine, quindi espandere questa istanza.In Object Explorer, connect to an instance of the Motore di database di SQL ServerSQL Server Database Engine, and then expand that instance.

  2. Espandere Database, quindi fare clic con il pulsante destro del mouse sul database che si vuole compattare.Expand Databases, and then right-click the database that you want to shrink.

  3. Scegliere Attività, Compatta, quindi fare clic su Database.Point to Tasks, point to Shrink, and then click Database.

    DatabaseDatabase
    Consente di visualizzare il nome del database selezionato.Displays the name of the selected database.

    Spazio allocatoCurrent allocated space
    Consente di visualizzare lo spazio totale utilizzato e inutilizzato per il database selezionato.Displays the total used and unused space for the selected database.

    Spazio disponibileAvailable free space
    Consente di visualizzare lo spazio disponibile totale nei file di log e di dati del database selezionato.Displays the sum of free space in the log and data files of the selected database.

    Riorganizza i file prima di rilasciare lo spazio inutilizzatoReorganize files before releasing unused space
    La selezione di questa opzione equivale all'esecuzione di DBCC SHRINKDATABASE specificando la percentuale di compattazione.Selecting this option is equivalent to executing DBCC SHRINKDATABASE specifying a target percent option. Deselezionare l'opzione equivale all'esecuzione di DBCC SHRINKDATABASE con l'opzione TRUNCATEONLY.Clearing this option is equivalent to executing DBCC SHRINKDATABASE with TRUNCATEONLY option. Per impostazione predefinita, questa opzione non è selezionata all'apertura della finestra di dialogo.By default, this option is not selected when the dialog is opened. Se viene selezionata, l'utente deve specificare la percentuale di compattazione.If this option is selected, the user must specify a target percent option.

    Spazio massimo disponibile nei file dopo la compattazioneMaximum free space in files after shrinking
    Immettere la massima percentuale di spazio che si desidera sia disponibile nei file del database dopo la compattazione del database.Enter the maximum percentage of free space to be left in the database files after the database has been shrunk. I valori consentiti sono compresi tra 0 e 99.Permissible values are between 0 and 99.

  4. Scegliere OK.Click OK.

Utilizzo di Transact-SQL Using Transact-SQL

Per compattare un databaseTo shrink a database

  1. Connettersi al Motore di databaseDatabase Engine.Connect to the Motore di databaseDatabase Engine.

  2. Dalla barra Standard fare clic su Nuova query.From the Standard bar, click New Query.

  3. Copiare e incollare l'esempio seguente nella finestra delle query e fare clic su Esegui.Copy and paste the following example into the query window and click Execute. In questo esempio si utilizza DBCC SHRINKDATABASE per ridurre le dimensioni dei file di dati e di log nel database UserDB e per ottenere il 10 percento di spazio disponibile nel database.This example uses DBCC SHRINKDATABASE to decreases the size of the data and log files in the UserDB database and to allow for 10 percent free space in the database.

    DBCC SHRINKDATABASE (UserDB, 10);
    GO
    

Completamento: Dopo la compattazione di un database Follow Up: After you shrink a database

I dati spostati per ridurre un file possono essere dispersi in qualsiasi percorso disponibile nel file,Data that is moved to shrink a file can be scattered to any available location in the file. provocando la frammentazione dell'indice e rallentando le prestazioni di query che eseguono ricerche in un intervallo dell'indiceThis causes index fragmentation and can slow the performance of queries that search a range of the index. Per eliminare la frammentazione, valutare la possibilità di ricompilare gli indici sul file dopo la compattazione.To eliminate the fragmentation, consider rebuilding the indexes on the file after shrinking.

Vedere ancheSee Also

Compattare un file Shrink a File
sys.databases (Transact-SQL) sys.databases (Transact-SQL)
sys.database_files (Transact-SQL) sys.database_files (Transact-SQL)
DBCC (Transact-SQL) DBCC (Transact-SQL)
DBCC SHRINKFILE (Transact-SQL) DBCC SHRINKFILE (Transact-SQL)
Filegroup e file di database Database Files and Filegroups