微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

DBCC大全集之适用版本MS SQLServer 2008 R2----DBCC CLEANTABLE回收表或索引视图中已删除的可变长度列的空间



回收表或索引视图中已删除的可变长度列的空间。

主题链接图标

 Transact-SQL 语法约定

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

database_namedatabase_id | 0

要清除的表所在的数据库。如果指定 0,则使用当前数据库数据库名称必须符合标识符规则。

table_nametable_id |  view_nameview_id

要清除的表或索引视图。

batch_size

每个事务处理的行数。如果未指定,或指定为 0,则该语句将在一个事务中处理整个表。

WITH NO_INFOMSGS

取消显示所有信息性消息。

注释

DBCC CLEANTABLE 用于在删除可变长度列之后回收空间。可变长度列可以属于下列数据类型之一:varcharnvarcharvarchar(max)nvarchar(max)varbinaryvarbinary(max)textntextimagesql_variant 和 xml。该命令不回收删除固定长度列后的空间。

如果删除的列存储在行内,则 DBCC CLEANTABLE 将从表的 IN_ROW_DATA 分配单元回收空间。如果列存储在行外,则将根据已删除列的数据类型从 ROW_OVERFLOW_DATA 或 LOB_DATA 分配单元回收空间。如果从 ROW_OVERFLOW_DATA 或 LOB_DATA 页回收空间时产生空页,DBCC CLEANTABLE 将删除该页。有关分配单元和数据类型的详细信息,请参阅表和索引数据结构体系结构

DBCC CLEANTABLE 作为一个或多个事务运行。如果未指定批大小,则该命令将在一个事务中处理整个表,并在操作过程中以独占方式锁定该表。对于某些大型表,单个事务的长度和所需的日志空间可能太大。如果指定批大小,则该命令将在一系列事务中运行,每个事务包括指定的行数。DBCC CLEANTABLE 不能作为其他事务内的事务运行。

该操作将被完整地记入日志。

系统表或临时表不支持使用 DBCC CLEANTABLE。

最佳做法

不应将 DBCC CLEANTABLE 作为日常维护任务来执行。而应在对表或索引视图中的可变长度列进行重要更改之后并且需要立即回收未使用空间时使用 DBCC CLEANTABLE。或者,也可以重新生成表或视图的索引;但是,此操作会耗费更多资源。

结果集

示例

A. 使用 DBCC CLEANTABLE 回收空间

以下示例对 AdventureWorks2008R2 示例数据库中的 Production.Document 表执行 DBCC CLEANTABLE。

DBCC CLEANTABLE (AdventureWorks2008R2,"Production.Document",0)
WITH NO_INFOMSGS;
GO


B. 使用 DBCC CLEANTABLE 并验证结果

以下示例创建一个表并用几个可变长度列填充该表。然后删除其中两列,并运行 DBCC CLEANTABLE 以回收未使用空间。在执行 DBCC CLEANTABLE 命令之前和之后,运行查询以验证页计数和已用空间值。

USE AdventureWorks2008R2;
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'AdventureWorks2008R2');
SET @object_id = OBJECT_ID(N'AdventureWorks2008R2.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,'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'AdventureWorks2008R2');
SET @object_id = OBJECT_ID(N'AdventureWorks2008R2.dbo.CleanTableTest');
SELECT alloc_unit_type_desc,'Detailed');
GO
-- Run DBCC CLEANTABLE.
DBCC CLEANTABLE (AdventureWorks2008R2,"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'AdventureWorks2008R2');
SET @object_id = OBJECT_ID(N'AdventureWorks2008R2.dbo.CleanTableTest');
SELECT alloc_unit_type_desc,'Detailed');
GO

回收表或索引视图中已删除的可变长度列的空间。

Transact-sql 语法约定

ottom:0px; overflow:auto; word-wrap:normal; font-family:Consolas,batch_size ]
)
[ WITH NO_INFOMSGS ]
参数

database_namedatabase_id | 0

标识符规则。

table_nametable_id |  view_nameview_id

要清除的表或索引视图。

batch_size

每个事务处理的行数。如果未指定,或指定为 0,则该语句将在一个事务中处理整个表。

WITH NO_INFOMSGS

取消显示所有信息性消息。

注释

DBCC CLEANTABLE 用于在删除可变长度列之后回收空间。可变长度列可以属于下列数据类型之一:varcharnvarcharvarchar(max)nvarchar(max)varbinaryvarbinary(max)textntextimagesql_variant 和 xml。该命令不回收删除固定长度列后的空间。

表和索引数据结构体系结构。

DBCC CLEANTABLE 作为一个或多个事务运行。如果未指定批大小,则该命令将在一个事务中处理整个表,并在操作过程中以独占方式锁定该表。对于某些大型表,单个事务的长度和所需的日志空间可能太大。如果指定批大小,则该命令将在一系列事务中运行,每个事务包括指定的行数。DBCC CLEANTABLE 不能作为其他事务内的事务运行。

该操作将被完整地记入日志。

系统表或临时表不支持使用 DBCC CLEANTABLE。

最佳做法

不应将 DBCC CLEANTABLE 作为日常维护任务来执行。而应在对表或索引视图中的可变长度列进行重要更改之后并且需要立即回收未使用空间时使用 DBCC CLEANTABLE。或者,也可以重新生成表或视图的索引;但是,此操作会耗费更多资源。

结果集

DBCC CLEANTABLE 将返回:

示例

A. 使用 DBCC CLEANTABLE 回收空间

Production.Document 表执行 DBCC CLEANTABLE。

ottom:0px; overflow:auto; word-wrap:normal; font-family:Consolas,0)
WITH NO_INFOMSGS;
GO


B. 使用 DBCC CLEANTABLE 并验证结果

以下示例创建一个表并用几个可变长度列填充该表。然后删除其中两列,并运行 DBCC CLEANTABLE 以回收未使用空间。在执行 DBCC CLEANTABLE 命令之前和之后,运行查询以验证页计数和已用空间值。

ottom:0px; overflow:auto; word-wrap:normal; font-family:Consolas,'Detailed');
GO




回收表或索引视图中已删除的可变长度列的空间。

删除的可变长度列的空间。

Transact-sql 语法约定

ottom:0px; overflow:auto; word-wrap:normal; font-family:Consolas,batch_size ]
)
[ WITH NO_INFOMSGS ]
参数

database_namedatabase_id | 0

标识符规则。

table_nametable_id |  view_nameview_id

要清除的表或索引视图。

batch_size

每个事务处理的行数。如果未指定,或指定为 0,则该语句将在一个事务中处理整个表。

WITH NO_INFOMSGS

取消显示所有信息性消息。

注释

DBCC CLEANTABLE 用于在删除可变长度列之后回收空间。可变长度列可以属于下列数据类型之一:varcharnvarcharvarchar(max)nvarchar(max)varbinaryvarbinary(max)textntextimagesql_variant 和 xml。该命令不回收删除固定长度列后的空间。

表和索引数据结构体系结构。

DBCC CLEANTABLE 作为一个或多个事务运行。如果未指定批大小,则该命令将在一个事务中处理整个表,并在操作过程中以独占方式锁定该表。对于某些大型表,单个事务的长度和所需的日志空间可能太大。如果指定批大小,则该命令将在一系列事务中运行,每个事务包括指定的行数。DBCC CLEANTABLE 不能作为其他事务内的事务运行。

该操作将被完整地记入日志。

系统表或临时表不支持使用 DBCC CLEANTABLE。

最佳做法

不应将 DBCC CLEANTABLE 作为日常维护任务来执行。而应在对表或索引视图中的可变长度列进行重要更改之后并且需要立即回收未使用空间时使用 DBCC CLEANTABLE。或者,也可以重新生成表或视图的索引;但是,此操作会耗费更多资源。

结果集

DBCC CLEANTABLE 将返回:

示例

A. 使用 DBCC CLEANTABLE 回收空间

Production.Document 表执行 DBCC CLEANTABLE。

ottom:0px; overflow:auto; word-wrap:normal; font-family:Consolas,0)
WITH NO_INFOMSGS;
GO


B. 使用 DBCC CLEANTABLE 并验证结果

以下示例创建一个表并用几个可变长度列填充该表。然后删除其中两列,并运行 DBCC CLEANTABLE 以回收未使用空间。在执行 DBCC CLEANTABLE 命令之前和之后,运行查询以验证页计数和已用空间值。

ottom:0px; overflow:auto; word-wrap:normal; font-family:Consolas,'Detailed');
GO

回收表或索引视图中已删除的可变长度列的空间。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐