Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Microsoft Fabric'te SQL veritabanı
Tablolarda veya dizine alınan görünümlerde bırakılan değişken uzunluktaki sütunlardan alan geri kazanılır.
Transact-SQL söz dizimi kuralları
Sözdizimi
DBCC CLEANTABLE
(
{ database_name | database_id | 0 }
, { table_name | table_id | view_name | view_id }
[ , batch_size ]
)
[ WITH NO_INFOMSGS ]
Bağımsız değişken
| database_namedatabase_id | 0
Temizlenecek tablonun ait olduğu veritabanı. 0 belirtilirse geçerli veritabanı kullanılır. Veritabanı adları tanımlayıcıları için kurallara uymalıdır.
table_name | table_id | view_name | view_id
Temizlenecek tablo veya dizine alınan görünüm.
batch_size
İşlem başına işlenen satır sayısı. Belirtilmezse, varsayılan değer 1000olur.
Uzun bir kurtarma süresinden kaçınmak için 0 değeri desteklenmez ve önerilmez.
BİLGİ_MSJSIZ
Tüm bilgilendirme iletilerini gizler.
Açıklamalar
DBCC CLEANTABLE, değişken uzunlukta bir sütun bırakıldıktan sonra alanı geri alır. Değişken uzunluklu sütun şu veri türlerinden biri olabilir: varchar, nvarchar, varchar(max), nvarchar(max), varbinary, varbinary(max), metin, ntext, resim, sql_variantve xml . Sabit uzunlukta bir sütun bırakıldıktan sonra komut alanı geri kazanmaz.
Bırakılan sütunlar satır içinde depolandıysa, DBCC CLEANTABLE tablonun IN_ROW_DATA ayırma biriminden alanı geri alır. Sütunlar satır dışında depolanmışsa, bırakılan sütunun veri türüne bağlı olarak ROW_OVERFLOW_DATA veya LOB_DATA ayırma biriminden alan geri kazanılır. bir ROW_OVERFLOW_DATA veya LOB_DATA sayfasından alan geri kazanılması boş bir sayfaya neden olursa, DBCC CLEANTABLE sayfayı kaldırır.
DBCC CLEANTABLE bir veya daha fazla işlem olarak çalışır. Toplu iş boyutu belirtilmezse, varsayılan boyut 1000olur. Bazı büyük tablolar için tek işlemin uzunluğu ve gereken günlük alanı çok fazla olabilir. Bir toplu iş boyutu belirtilirse, komut her biri belirtilen satır sayısı dahil olmak üzere bir dizi işlemde çalışır.
DBCC CLEANTABLE başka bir işlem içinde işlem olarak çalıştırılamaz.
Bu işlem tamamen günlüğe kaydedilir.
DBCC CLEANTABLE sistem tablolarında, geçici tablolarda veya tablonun bellek için iyileştirilmiş columnstore dizin bölümünde kullanılmak üzere desteklenmez.
En iyi yöntemler
DBCC CLEANTABLE rutin bir bakım görevi olarak yürütülmemelidir. Bunun yerine, tablodaki veya dizinli görünümdeki değişken uzunluktaki sütunlarda önemli değişiklikler yaptıktan ve kullanılmayan alanı hemen geri kazanmanız gerektiğinde DBCC CLEANTABLE kullanın. Alternatif olarak, tablo veya görünümdeki dizinleri yeniden oluşturabilirsiniz; ancak bunu yapmak daha yoğun kaynak gerektiren bir işlemdir.
Sonuç kümesi
DBCC CLEANTABLE döndürür:
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
İzinler
Çağıranın tabloya veya dizine alınan görünüme sahip olması veya sysadmin sabit sunucu rolünün, db_owner sabit veritabanı rolünün veya db_ddladmin sabit veritabanı rolünün üyesi olması gerekir.
Örnekler
A. Alanı geri kazanmak için DBCC CLEANTABLE kullanma
Aşağıdaki örnek, DBCC CLEANTABLE örnek veritabanındaki Production.Document tablosu için AdventureWorks2025 yürütür.
DBCC CLEANTABLE (AdventureWorks2022, 'Production.Document', 1000)
WITH NO_INFOMSGS;
GO
B. DBCC CLEANTABLE kullanma ve sonuçları doğrulama
Aşağıdaki örnek, bir tabloyu çeşitli değişken uzunlukta sütunlarla oluşturur ve doldurur. Ardından sütunlardan ikisi bırakılır ve kullanılmayan alanı geri kazanmak için DBCC CLEANTABLE çalıştırılır.
DBCC CLEANTABLE komutu yürütülmeden önce ve sonra kullanılan sayfa sayılarını ve kullanılan değerleri doğrulamak için bir sorgu çalıştırılır.
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