DBCC CLEANTABLE (Transact-SQL)
Si applica a: SQL Server Azure SQL DatabaseIstanza gestita di SQL di Azure
Recupera lo spazio delle colonne a lunghezza variabile eliminate nelle tabelle e nelle viste indicizzate.
Convenzioni di sintassi Transact-SQL
Sintassi
DBCC CLEANTABLE
(
{ database_name | database_id | 0 }
, { table_name | table_id | view_name | view_id }
[ , batch_size ]
)
[ WITH NO_INFOMSGS ]
Nota
Per visualizzare la sintassi Transact-SQL per SQL Server 2014 e versioni precedenti, vedere Documentazione delle versioni precedenti.
Argomenti
database_name | database_id | 0
Database in cui appartiene la tabella da pulire. Se si specifica 0, viene utilizzato il database corrente. I nomi di database devono essere conformi alle regole per gli identificatori.
table_name | table_id | view_name | view_id
Tabella o visualizzazione indicizzata da pulire.
batch_size
Numero di righe elaborate per transazione. Se non è specificato, il valore predefinito è 1000
. Per evitare un periodo di ripristino lungo, 0
non è consentito.
WITH NO_INFOMSGS
Disattiva tutti i messaggi informativi.
Osservazioni
DBCC CLEANTABLE
recupera lo spazio dopo l'eliminazione di una colonna a lunghezza variabile. I possibili tipi di dati per una colonna a lunghezza variabile sono i seguenti: varchar, nvarchar, varchar(max) , nvarchar(max) , varbinary, varbinary(max) , text, ntext, image, sql_variant e xml. Il comando non recupera spazio dopo l'eliminazione di una colonna a lunghezza fissa.
Se le colonne eliminate sono state archiviate in riga, DBCC CLEANTABLE
recupera lo spazio dall'unità di allocazione IN_ROW_DATA della tabella. Se le colonne erano archiviate all'esterno di righe, lo spazio viene recuperato dall'unità di allocazione ROW_OVERFLOW_DATA o LOB_DATA a seconda del tipo di dati della colonna eliminata. Se si recupera lo spazio da un ROW_OVERFLOW_DATA o da una pagina LOB_DATA viene generata una pagina vuota, DBCC CLEANTABLE
rimuove la pagina.
DBCC CLEANTABLE
viene eseguito come una o più transazioni. Se non viene specificata una dimensione batch, la dimensione predefinita è 1000
. Per tabelle di grandi dimensioni, la lunghezza della singola transazione e lo spazio del log necessario potrebbero risultare eccessivi. Se si specificano le dimensioni del batch, il comando viene eseguito in una serie di transazioni, ognuna con il numero di righe specificato. DBCC CLEANTABLE
non può essere eseguito come transazione all'interno di un'altra transazione.
Questa operazione viene registrata completamente.
DBCC CLEANTABLE
non è supportato per l'uso nelle tabelle di sistema, nelle tabelle temporanee o nella parte dell'indice columnstore ottimizzato per la memoria di una tabella.
Procedure consigliate
DBCC CLEANTABLE
non deve essere eseguito come attività di manutenzione di routine. Usare invece DBCC CLEANTABLE
dopo aver apportato modifiche significative alle colonne a lunghezza variabile in una tabella o in una vista indicizzata e è necessario recuperare immediatamente lo spazio inutilizzato. In alternativa, è possibile ricompilare gli indici sulla tabella o sulla vista. Questa operazione richiede tuttavia molte risorse.
Set di risultati
DBCC CLEANTABLE
Restituisce:
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Autorizzazioni
Il chiamante deve essere il proprietario della tabella o della vista indicizzata oppure un membro del ruolo predefinito del server sysadmin o dei ruoli predefiniti del database db_owner o db_ddladmin.
Esempi
R. Usare DBCC CLEANTABLE per recuperare spazio
Nell'esempio seguente viene eseguita DBCC CLEANTABLE
la Production.Document
tabella nel AdventureWorks2022
database di esempio.
DBCC CLEANTABLE (AdventureWorks2022, 'Production.Document', 1000)
WITH NO_INFOMSGS;
GO
B. Usare DBCC CLEANTABLE e verificare i risultati
Nell'esempio seguente viene creata e popolata una tabella con più colonne a lunghezza variabile. Due delle colonne vengono quindi eliminate e DBCC CLEANTABLE
vengono eseguite per recuperare lo spazio inutilizzato. Viene eseguita una query per verificare i conteggi delle pagine e lo spazio usati prima e dopo l'esecuzione del DBCC CLEANTABLE
comando.
USE AdventureWorks2022;
GO
IF OBJECT_ID('dbo.CleanTableTest', 'U') IS NOT NULL
DROP TABLE dbo.CleanTableTest;
GO
CREATE TABLE dbo.CleanTableTest (
FileName NVARCHAR(4000)
, DocumentSummary NVARCHAR(max)
, Document VARBINARY(max)
);
GO
-- Populate the table with data from the Production.Document table.
INSERT INTO dbo.CleanTableTest
SELECT REPLICATE(FileName, 1000), DocumentSummary, Document
FROM Production.Document;
GO
-- Verify the current page counts and average space used in the dbo.CleanTableTest table.
DECLARE @db_id SMALLINT;
DECLARE @object_id INT;
SET @db_id = DB_ID(N'AdventureWorks2022');
SET @object_id = OBJECT_ID(N'AdventureWorks2022.dbo.CleanTableTest');
SELECT alloc_unit_type_desc
, page_count
, avg_page_space_used_in_percent
, record_count
FROM sys.dm_db_index_physical_stats(@db_id, @object_id, NULL, NULL, 'Detailed');
GO
-- Drop two variable-length columns from the table.
ALTER TABLE dbo.CleanTableTest
DROP COLUMN FileName, Document;
GO
-- Verify the page counts and average space used in the dbo.CleanTableTest table
-- Notice that the values have not changed.
DECLARE @db_id SMALLINT;
DECLARE @object_id INT;
SET @db_id = DB_ID(N'AdventureWorks2022');
SET @object_id = OBJECT_ID(N'AdventureWorks2022.dbo.CleanTableTest');
SELECT alloc_unit_type_desc
, page_count
, avg_page_space_used_in_percent
, record_count
FROM sys.dm_db_index_physical_stats(@db_id, @object_id, NULL, NULL, 'Detailed');
GO
-- Run DBCC CLEANTABLE.
DBCC CLEANTABLE (AdventureWorks2022, 'dbo.CleanTableTest');
GO
-- Verify the values in the dbo.CleanTableTest table after the DBCC CLEANTABLE command.
DECLARE @db_id SMALLINT;
DECLARE @object_id INT;
SET @db_id = DB_ID(N'AdventureWorks2022');
SET @object_id = OBJECT_ID(N'AdventureWorks2022.dbo.CleanTableTest');
SELECT alloc_unit_type_desc
, page_count
, avg_page_space_used_in_percent
, record_count
FROM sys.dm_db_index_physical_stats(@db_id, @object_id, NULL, NULL, 'Detailed');
GO