Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server
Azure SQL Database
Azure 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
Verwante inhoud
- DBCC (Transact-SQL)
- sys.allocation_units (Transact-SQL)