Поделиться через


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

См. также