Megosztás a következőn keresztül:


DBCC CLEANTABLE (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL-adatbázis a Microsoft Fabricben

A táblák vagy indexelt nézetek eldobott változóhosszú oszlopaiból térközt foglal vissza.

Transact-SQL szintaxis konvenciói

Szintaxis

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

Érvek

| database_namedatabase_id | 0

Az adatbázis, amelyben a tisztítandó tábla található. Ha 0 van megadva, a rendszer az aktuális adatbázist használja. Az adatbázisneveknek követnie kell azonosítókszabályait.

table_name | table_id | view_name | view_id

A tisztítandó táblázat vagy indexelt nézet.

batch_size

A tranzakciónként feldolgozott sorok száma. Ha nincs megadva, az alapértelmezett érték 1000.

A hosszú helyreállítási időszak elkerülése érdekében a 0 értéke nem támogatott és nem ajánlott.

A NO_INFOMSGS

Letiltja az összes tájékoztató üzenetet.

Megjegyzések

DBCC CLEANTABLE egy változó hosszúságú oszlop elvetés után térközt ad vissza. A változó hosszúságú oszlop a következő adattípusok egyike lehet: varchar, nvarchar, varchar(max), nvarchar(max), , varbinary(max), szöveg, ntext, kép, sql_variantés xml. A parancs nem foglal vissza szóközt egy rögzített hosszúságú oszlop elvetése után.

Ha az elvetett oszlopokat sorba helyezték, DBCC CLEANTABLE a tábla IN_ROW_DATA foglalási egységéből visszanyeri a helyet. Ha az oszlopokat soron kívül tárolták, akkor a rendszer az eldobott oszlop adattípusától függően a ROW_OVERFLOW_DATA vagy a LOB_DATA foglalási egységből tér vissza. Ha egy ROW_OVERFLOW_DATA vagy LOB_DATA lapról való visszavétel üres lapot eredményez, DBCC CLEANTABLE eltávolítja a lapot.

DBCC CLEANTABLE egy vagy több tranzakcióként fut. Ha nincs megadva kötegméret, az alapértelmezett méret 1000. Egyes nagy táblák esetében az egyetlen tranzakció hossza és a szükséges naplóterület túl sok lehet. Ha a kötegméret meg van adva, a parancs tranzakciók sorozatában fut, beleértve a megadott számú sort is. DBCC CLEANTABLE nem futtatható tranzakcióként egy másik tranzakción belül.

Ez a művelet teljes mértékben naplózva van.

DBCC CLEANTABLE nem támogatott rendszertáblákon, ideiglenes táblákon vagy egy tábla memóriaoptimalizált oszlopcentrikus indexrészén.

Ajánlott eljárások

DBCC CLEANTABLE nem szabad rutin karbantartási feladatként végrehajtani. Ehelyett használja a DBCC CLEANTABLE, miután jelentős módosításokat végzett a változó hosszúságú oszlopokon egy táblázatban vagy indexelt nézetben, és azonnal vissza kell vennie a nem használt területet. Másik lehetőségként újraépítheti az indexeket a táblában vagy a nézetben; ez azonban erőforrás-igényesebb művelet.

Eredményhalmaz

DBCC CLEANTABLE a következőt adja vissza:

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

Engedélyek

A hívónak rendelkeznie kell a táblával vagy az indexelt nézetpel, vagy tagja kell lennie a sysadmin rögzített kiszolgálói szerepkörnek, a db_owner rögzített adatbázis-szerepkörnek vagy a db_ddladmin rögzített adatbázis-szerepkörnek.

Példák

Egy. Terület felszabadításához használja a DBCC CLEANTABLE-t

Az alábbi példa a DBCC CLEANTABLE mintaadatbázis Production.Document táblájának AdventureWorks2025 hajtja végre.

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

B. A DBCC CLEANTABLE használata és az eredmények ellenőrzése

Az alábbi példa több változó hosszúságú oszlopot tartalmazó táblát hoz létre és tölt fel. Ezután a rendszer elvet két oszlopot, és DBCC CLEANTABLE fut a fel nem használt terület visszaszerzéséhez. A rendszer lekérdezést futtat az oldalszám és a felhasznált terület ellenőrzéséhez a DBCC CLEANTABLE parancs végrehajtása előtt és után.

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