Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Baza 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