Bagikan melalui


DBCC CLEANTABLE (Transact-SQL)

Berlaku untuk:Database SQL Server Azure SQL Azure SQL Managed Instance

Merebut kembali ruang dari kolom panjang variabel yang dihilangkan dalam tabel atau tampilan terindeks.

Konvensi sintaks transact-SQL

Sintaks

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

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 dan yang lebih lama, lihat Dokumentasi versi sebelumnya.

Argumen

| database_name database_id | 0

Database tempat tabel yang akan dibersihkan berada. Jika 0 ditentukan, database saat ini digunakan. Nama database harus mengikuti aturan untuk pengidentifikasi.

| table_name | table_id | view_name view_id

Tabel atau tampilan terindeks yang akan dibersihkan.

batch_size

Jumlah baris yang diproses per transaksi. Jika tidak ditentukan, nilai defaultnya adalah 1000. Untuk menghindari periode pemulihan yang lama, 0 tidak diizinkan.

DENGAN NO_INFOMSGS

Menyembunyikan semua pesan informasi.

Keterangan

DBCC CLEANTABLE merebut kembali spasi setelah kolom panjang variabel dihilangkan. Kolom dengan panjang variabel dapat berupa salah satu jenis data berikut: varchar, nvarchar, varchar(max), nvarchar(max), varbinary, varbinary(max), text, ntext, image, sql_variant, dan xml. Perintah tidak mengklaim kembali ruang setelah kolom panjang tetap dihilangkan.

Jika kolom yang dihilangkan disimpan secara berturut-turut, DBCC CLEANTABLE klaim kembali ruang dari unit alokasi IN_ROW_DATA tabel. Jika kolom disimpan di luar baris, spasi diklaim kembali dari ROW_OVERFLOW_DATA atau unit alokasi LOB_DATA tergantung pada jenis data kolom yang dijatuhkan. Jika mengklaim kembali ruang dari halaman ROW_OVERFLOW_DATA atau LOB_DATA menghasilkan halaman kosong, DBCC CLEANTABLE akan menghapus halaman.

DBCC CLEANTABLE berjalan sebagai satu atau beberapa transaksi. Jika ukuran batch tidak ditentukan, ukuran defaultnya adalah 1000. Untuk beberapa tabel besar, panjang transaksi tunggal dan ruang log yang diperlukan mungkin terlalu banyak. Jika ukuran batch ditentukan, perintah berjalan dalam serangkaian transaksi, masing-masing termasuk jumlah baris yang ditentukan. DBCC CLEANTABLE tidak dapat dijalankan sebagai transaksi di dalam transaksi lain.

Operasi ini sepenuhnya dicatat.

DBCC CLEANTABLE tidak didukung untuk digunakan pada tabel sistem, tabel sementara, atau bagian indeks penyimpan kolom yang dioptimalkan memori dari tabel.

Praktik terbaik

DBCC CLEANTABLE tidak boleh dijalankan sebagai tugas pemeliharaan rutin. Sebagai gantinya, gunakan DBCC CLEANTABLE setelah Anda membuat perubahan signifikan pada kolom panjang variabel dalam tabel atau tampilan terindeks dan Anda perlu segera mengklaim kembali ruang yang tidak digunakan. Atau, Anda dapat membangun kembali indeks pada tabel atau tampilan; namun, melakukannya adalah operasi yang lebih intensif sumber daya.

Tataan hasil

DBCC CLEANTABLE menghasilkan:

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

Izin

Pemanggil harus memiliki tabel atau tampilan terindeks, atau menjadi anggota peran server tetap sysadmin , peran database tetap db_owner , atau peran database tetap db_ddladmin .

Contoh

A. Menggunakan DBCC CLEANTABLE untuk mengklaim kembali ruang

Contoh berikut dijalankan DBCC CLEANTABLE untuk Production.Document tabel dalam AdventureWorks2022 database sampel.

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

B. Menggunakan DBCC CLEANTABLE dan memverifikasi hasil

Contoh berikut membuat dan mengisi tabel dengan beberapa kolom panjang variabel. Dua kolom kemudian dihilangkan dan DBCC CLEANTABLE dijalankan untuk mengklaim kembali ruang yang tidak digunakan. Kueri dijalankan untuk memverifikasi jumlah halaman dan nilai ruang yang digunakan sebelum dan sesudah DBCC CLEANTABLE perintah dijalankan.

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

Lihat juga