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.
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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk