DBCC CLEANTABLE (Transact-SQL)
Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure
Recupera lo spazio delle colonne a lunghezza variabile eliminate nelle tabelle e nelle viste indicizzate.
Convenzioni relative alla sintassi Transact-SQL
Sintassi
DBCC CLEANTABLE
(
{ database_name | database_id | 0 }
, { table_name | table_id | view_name | view_id }
[ , batch_size ]
)
[ WITH NO_INFOMSGS ]
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 vista indicizzata da pulire.
batch_size
Numero di righe elaborate per transazione. Se non è specificato, il valore predefinito è 1000
.
Il valore non 0
è supportato e non consigliato per evitare un lungo periodo di recupero.
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 spazio da un ROW_OVERFLOW_DATA o LOB_DATA pagina viene restituita una pagina vuota, DBCC CLEANTABLE
la pagina viene rimossa.
DBCC CLEANTABLE
viene eseguito come una o più transazioni. Se non viene specificata una dimensione batch, le dimensioni predefinite sono 1000
. Per alcune tabelle di grandi dimensioni, la lunghezza della singola transazione e dello spazio di log necessario potrebbe essere eccessiva. 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 ed è 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
rendiconto:
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 DBCC CLEANTABLE
eseguita per 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 ed DBCC CLEANTABLE
eseguite per recuperare lo spazio inutilizzato. Viene eseguita una query per verificare il numero di pagine e lo spazio usati valori 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