DBCC CLEANTABLE (Transact-SQL)
platí pro:SQL Server
Azure SQL Database
azure SQL Managed Instance
Uvolní místo z vyřazených sloupců s proměnlivou délkou v tabulkách nebo indexovaných zobrazeních.
Syntax
DBCC CLEANTABLE
(
{ database_name | database_id | 0 }
, { table_name | table_id | view_name | view_id }
[ , batch_size ]
)
[ WITH NO_INFOMSGS ]
Argumenty
database_name | database_id | 0
Databáze, do které má být tabulka vyčištěna, patří. Pokud je zadána hodnota 0, použije se aktuální databáze. Názvy databází musí dodržovat pravidla pro identifikátory .
table_name | table_id | view_name | view_id
Tabulka nebo indexované zobrazení, které se má vyčistit.
batch_size
Počet řádků zpracovaných na transakci. Pokud není zadána, výchozí hodnota je 1000
.
Hodnota 0
není podporována a nedoporučuje se, aby se zabránilo dlouhému období obnovení.
WITH NO_INFOMSGS
Potlačí všechny informační zprávy.
Poznámky
DBCC CLEANTABLE
uvolní místo po vyřazení sloupce s proměnnou délkou. Sloupec s proměnnou délkou může být jedním z následujících datových typů: varchar, nvarchar, varchar(max), nvarchar(max), varbinary , varbinary(max), text, ntext, obrázek, sql_varianta xml. Příkaz po vyřazení sloupce s pevnou délkou neuloží mezeru.
Pokud byly vyřazené sloupce uloženy v řádku, DBCC CLEANTABLE
uvolní místo z IN_ROW_DATA alokační jednotky tabulky. Pokud byly sloupce uloženy mimo řádek, uvolní se mezera z ROW_OVERFLOW_DATA nebo LOB_DATA alokační jednotky v závislosti na datovém typu vyřazeného sloupce. Pokud uvolnění místa z ROW_OVERFLOW_DATA nebo LOB_DATA stránky způsobí prázdnou stránku, DBCC CLEANTABLE
stránku odebere.
DBCC CLEANTABLE
běží jako jedna nebo více transakcí. Pokud není zadaná velikost dávky, výchozí velikost je 1000
. U některých velkých tabulek může být délka jedné transakce a požadovaného místa protokolu příliš velká. Pokud je zadána velikost dávky, příkaz se spustí v řadě transakcí, z nichž každý zahrnuje zadaný počet řádků.
DBCC CLEANTABLE
nelze spustit jako transakci uvnitř jiné transakce.
Tato operace je plně protokolovaná.
DBCC CLEANTABLE
se nepodporuje pro použití v systémových tabulkách, dočasných tabulkách ani v části indexu columnstore optimalizované pro paměť v tabulce.
Osvědčené postupy
DBCC CLEANTABLE
by se nemělo spouštět jako rutinní úloha údržby. Místo toho použijte DBCC CLEANTABLE
po provedení významných změn sloupců s proměnlivou délkou v tabulce nebo indexovaného zobrazení a musíte okamžitě uvolnit nevyužité místo. Případně můžete znovu sestavit indexy v tabulce nebo zobrazení; Je to však operace náročná na prostředky.
Sada výsledků
DBCC CLEANTABLE
vrátí:
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Dovolení
Volající musí vlastnit tabulku nebo indexované zobrazení nebo být členem správce systému pevnou roli serveru, db_owner pevnou roli databáze nebo db_ddladmin pevnou roli databáze.
Příklady
A. Uvolnění místa pomocí DBCC CLEANTABLE
Následující příklad spustí DBCC CLEANTABLE
pro tabulku Production.Document
v ukázkové databázi AdventureWorks2022
.
DBCC CLEANTABLE (AdventureWorks2022, 'Production.Document', 1000)
WITH NO_INFOMSGS;
GO
B. Použití tabulky DBCC CLEANTABLE a ověření výsledků
Následující příklad vytvoří a naplní tabulku několika sloupci s proměnlivou délkou. Dva sloupce se pak zahodí a DBCC CLEANTABLE
se spustí a uvolní nevyužité místo. Spustí se dotaz, který ověří počet stránek a využité hodnoty před a po provedení příkazu DBCC CLEANTABLE
.
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