Udostępnij za pomocą


TABLICA CZYSZCZENIA DBCC (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBaza danych SQL w usłudze Microsoft Fabric

Odzyskuje miejsce po porzuconych kolumnach o zmiennej długości w tabelach lub widokach indeksowanych.

Transact-SQL konwencje składni

Składnia

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

Arguments

| database_namedatabase_id | 0

Baza danych, do której należy tabela do czyszczenia. Jeśli podano 0, używa się bieżącej bazy danych. Nazwy baz danych muszą przestrzegać zasad dotyczących identyfikatorów.

table_name | table_id | view_name | view_id

Tabela lub widok indeksowany do czyszczenia.

batch_size

Liczba wierszy przetwarzanych na transakcję. Jeśli nie zostanie określony, wartość domyślna to 1000.

Wartość jest 0 niepoparta i nie jest zalecana, aby uniknąć długiego okresu rekonwalescencji.

Z NO_INFOMSGS

Pomija wszystkie komunikaty informacyjne.

Uwagi

DBCC CLEANTABLE odzyskuje miejsce po upuszczeniu kolumny o zmiennej długości. Kolumna o zmiennej długości może być jednym z następujących typów danych: varchar, nvarchar, varchar(max),nvarchar(max),varbinary, varbinary(max),text, ntext, image, sql_variant oraz xml. Polecenie nie odzyskuje miejsca po upuszczeniu kolumny o stałej długości.

Jeśli usunięte kolumny były przechowywane w wierszu, DBCC CLEANTABLE odzyskuje się miejsce z jednostki IN_ROW_DATA alokacji tabeli. Jeśli kolumny były przechowywane poza wierszem, miejsce jest odzyskiwane z jednostki ROW_OVERFLOW_DATA lub LOB_DATA, w zależności od typu danych usuniętej kolumny. Jeśli odzyskanie miejsca z ROW_OVERFLOW_DATA lub LOB_DATA strony skutkuje pustą stroną, DBCC CLEANTABLE usuń ją.

DBCC CLEANTABLE Działa to jedna lub więcej transakcji. Jeśli rozmiar partii nie jest określony, domyślny rozmiar to 1000. W przypadku niektórych dużych tabel długość pojedynczej transakcji i wymagana przestrzeń logu mogą być zbyt duże. Jeśli podana jest wielkość partii, polecenie wykonuje się w serii transakcji, z których każda zawiera określoną liczbę wierszy. DBCC CLEANTABLE Nie może być przebiegana jako transakcja w innej transakcji.

Ta operacja jest w pełni rejestrowana.

DBCC CLEANTABLE nie jest obsługiwany w tabelach systemowych, tabelach tymczasowych ani w sekcji indeksu columnstore w pamięci tabeli.

Najlepsze rozwiązania

DBCC CLEANTABLE Nie powinno być wykonywane jako rutynowe zadanie konserwacyjne. Zamiast tego użyj DBCC CLEANTABLE po dokonaniu znaczących zmian w kolumnach o zmiennej długości w tabeli lub widoku indeksowanym i musisz natychmiast odzyskać niewykorzystaną przestrzeń. Alternatywnie możesz odbudować indeksy w tabeli lub widoku; jednak jest to operacja wymagająca więcej zasobów.

Zestaw wyników

DBCC CLEANTABLE Zwraca:

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

Permissions

Dzwoniący musi być właścicielem tabeli lub widoku indeksowanego albo być członkiem roli stałego serwera administratora systemu , roli db_owner stałej bazy danych lub roli db_ddladmin stałej bazy danych.

Przykłady

A. Użyj DBCC CLEANTABLE, aby odzyskać miejsce

Poniższy przykład wykonuje DBCC CLEANTABLE się dla tabeli Production.Document w przykładowej bazie AdventureWorks2025 danych.

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

B. Użyj DBCC CLEANTABLE i weryfikuj wyniki

Poniższy przykład tworzy i wypełnia tabelę kilkoma kolumnami o zmiennej długości. Dwie kolumny są następnie usuwane i DBCC CLEANTABLE uruchamiane, aby odzyskać niewykorzystane miejsce. Wykonywane jest zapytanie, aby zweryfikować liczbę stron i wartości zajętej przestrzeni przed i po DBCC CLEANTABLE wykonaniu polecenia.

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