DBCC CLEANTABLE (Transact-SQL)
Применимо к:База данныхSQL Server Azure SQL Управляемый экземпляр SQL Azure
Освобождает место на диске, занятое удаленными из таблиц столбцами переменной длины или индексированными представлениями.
Соглашения о синтаксисе Transact-SQL
Синтаксис
DBCC CLEANTABLE
(
{ database_name | database_id | 0 }
, { table_name | table_id | view_name | view_id }
[ , batch_size ]
)
[ WITH NO_INFOMSGS ]
Примечание
Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.
Аргументы
database_name | database_id | 0
База данных, в которую входит таблица для очистки. Если указано значение 0, используется текущая база данных. Имена баз данных должны соответствовать правилам построения идентификаторов.
table_name | table_id | view_name | view_id
Таблица или индексированные представления для очистки.
batch_size
Количество строк, обработанных на транзакцию. Если не задано, по умолчанию используется значение 1000
. Чтобы избежать длительного периода восстановления, 0
параметр не допускается.
WITH NO_INFOMSGS
Подавляет вывод всех информационных сообщений.
Remarks
DBCC CLEANTABLE
Освобождает пространство после удаления столбца переменной длины. Столбец переменной длины может иметь один из следующих типов данных: varchar, nvarchar, varchar(max) , nvarchar(max) , varbinary, varbinary(max) , text, ntext, image, sql_variant и xml. Команда не освобождает место после удаления столбца фиксированной длины.
Если удаленные столбцы хранились в строке, DBCC CLEANTABLE
освобождает место из IN_ROW_DATA единицы распределения таблицы. Если столбцы были сохранены вне строк, пространство будет освобождено либо из единицы распределения ROW_OVERFLOW_DATA, либо из единицы распределения LOB_DATA, в зависимости от типа данных удаленного столбца. Если освобождение места с ROW_OVERFLOW_DATA или LOB_DATA страницы приводит к пустой странице, DBCC CLEANTABLE
страница удаляется.
DBCC CLEANTABLE
выполняется как одна или несколько транзакций. Если размер пакета не указан, размер по умолчанию — 1000
. Для некоторых больших таблиц длительности транзакции и необходимого размера журнала может оказаться недостаточно. Если указан размер пакета, команда выполняет серию транзакций, в каждой из которых обрабатывается указанное число строк. DBCC CLEANTABLE
не может выполняться как транзакция внутри другой транзакции.
Эта операция выполняется с полной регистрацией.
DBCC CLEANTABLE
не поддерживается для использования в системных таблицах, временных таблицах или оптимизированной для памяти части индекса columnstore таблицы.
Рекомендации
DBCC CLEANTABLE
Не следует выполнять как обычную задачу обслуживания. Вместо этого используйте DBCC CLEANTABLE
после внесения значительных изменений в столбцы переменной длины в таблице или индексируемом представлении, и вам нужно немедленно освободить неиспользуемое пространство. Кроме того, можно выполнить перестроение индексов таблицы или представления, однако это более ресурсоемкая операция.
Наборы результатов
DBCC CLEANTABLE
возвращает:
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Разрешения
Участник должен быть владельцем таблицы или индексированного представления либо членом предопределенной роли сервера sysadmin, предопределенной роли базы данных db_owner или предопределенной роли базы данных db_ddladmin.
Примеры
A. Использование DBCC CLEANTABLE для освобождения места
Следующий пример выполняется DBCC CLEANTABLE
для Production.Document
таблицы в образце AdventureWorks2022
базы данных.
DBCC CLEANTABLE (AdventureWorks2022, 'Production.Document', 1000)
WITH NO_INFOMSGS;
GO
Б. Использование инструкции DBCC CLEANTABLE и проверка результатов
В следующем примере создается таблица и заполняется несколькими столбцами переменной длины. Затем два столбца удаляются и DBCC CLEANTABLE
выполняются, чтобы освободить неиспользуемое пространство. Выполняется запрос для проверки количества страниц и используемых значений пространства до и после DBCC CLEANTABLE
выполнения команды.
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