Delen via


DBCC CLEANTABLE (Transact-SQL)

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Maakt ruimte vrij van verwijderde kolommen met variabele lengte in tabellen of geïndexeerde weergaven.

Transact-SQL syntaxisconventies

Syntaxis

DBCC CLEANTABLE
(
    { database_name | database_id | 0 }
    , { table_name | table_id | view_name | view_id }
    [ , batch_size ]
)
[ WITH NO_INFOMSGS ]

Argumenten

database_name | database_id | 0

De database waarin de tabel moet worden opgeschoond, behoort. Als 0 is opgegeven, wordt de huidige database gebruikt. Databasenamen moeten voldoen aan de regels voor id's.

table_name | table_id | view_name | view_id

De tabel of geïndexeerde weergave die moet worden opgeschoond.

batch_size

Het aantal rijen dat per transactie is verwerkt. Als deze niet is opgegeven, wordt de standaardwaarde 1000.

Een waarde van 0 wordt niet ondersteund en wordt niet aanbevolen om een lange herstelperiode te voorkomen.

MET NO_INFOMSGS

Onderdrukt alle informatieve berichten.

Opmerkingen

DBCC CLEANTABLE ruimte vrijmaken nadat een kolom met variabele lengte is verwijderd. Een kolom met variabele lengte kan een van de volgende gegevenstypen zijn: varchar, nvarchar, varchar(max), nvarchar(max), varbinary, varbinary(max), tekst, ntext, afbeelding, sql_varianten xml-. De opdracht maakt geen ruimte vrij nadat een kolom met vaste lengte is verwijderd.

Als de verwijderde kolommen in rij zijn opgeslagen, maakt DBCC CLEANTABLE ruimte vrij uit de IN_ROW_DATA toewijzingseenheid van de tabel. Als de kolommen buiten de rij zijn opgeslagen, wordt ruimte vrijgemaakt van de ROW_OVERFLOW_DATA of de LOB_DATA toewijzingseenheid, afhankelijk van het gegevenstype van de verwijderde kolom. Als ruimte vrijkomt van een ROW_OVERFLOW_DATA of LOB_DATA pagina resulteert in een lege pagina, DBCC CLEANTABLE de pagina verwijdert.

DBCC CLEANTABLE wordt uitgevoerd als een of meer transacties. Als er geen batchgrootte is opgegeven, wordt de standaardgrootte 1000. Voor sommige grote tabellen kan de lengte van de enkele transactie en de benodigde logboekruimte te veel zijn. Als een batchgrootte is opgegeven, wordt de opdracht uitgevoerd in een reeks transacties, elk inclusief het opgegeven aantal rijen. DBCC CLEANTABLE kan niet worden uitgevoerd als een transactie binnen een andere transactie.

Deze bewerking is volledig geregistreerd.

DBCC CLEANTABLE wordt niet ondersteund voor gebruik in systeemtabellen, tijdelijke tabellen of het indexgedeelte van een tabel dat is geoptimaliseerd voor het geheugen.

Aanbevolen procedures

DBCC CLEANTABLE mag niet worden uitgevoerd als routineonderhoudstaak. Gebruik in plaats daarvan DBCC CLEANTABLE nadat u belangrijke wijzigingen hebt aangebracht in kolommen met variabele lengte in een tabel of geïndexeerde weergave. U moet de ongebruikte ruimte onmiddellijk vrijmaken. U kunt de indexen ook opnieuw opbouwen in de tabel of weergave; Dit is echter een meer resource-intensieve bewerking.

Resultatenset

DBCC CLEANTABLE retourneert:

DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Machtigingen

Aanroeper moet eigenaar zijn van de tabel of geïndexeerde weergave, of lid zijn van de sysadmin vaste serverfunctie, de db_owner vaste databaserol of de db_ddladmin vaste databaserol.

Voorbeelden

Een. DBCC CLEANTABLE gebruiken om ruimte vrij te maken

In het volgende voorbeeld wordt DBCC CLEANTABLE uitgevoerd voor de Production.Document tabel in de AdventureWorks2022 voorbeelddatabase.

DBCC CLEANTABLE (AdventureWorks2022, 'Production.Document', 1000)
WITH NO_INFOMSGS;
GO

B. DBCC CLEANTABLE gebruiken en resultaten controleren

In het volgende voorbeeld wordt een tabel gemaakt en gevuld met verschillende kolommen met een variabele lengte. Twee van de kolommen worden vervolgens verwijderd en DBCC CLEANTABLE wordt uitgevoerd om de ongebruikte ruimte vrij te maken. Er wordt een query uitgevoerd om het aantal pagina's en de gebruikte ruimte te controleren voor en nadat de opdracht DBCC CLEANTABLE is uitgevoerd.

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