SQL Server在删除变长列或者减小变长列的长度后,表的大小不会响应自动减小,除非DBA重建索引或者reorganized索引。变长列包括varchar,nvarchar,
varchar(max), nvarchar(max), varbinary, varbinary(max), text, ntext,image, sql_variant,和xml。
SQL Server提供了一个DBCCCLEANTABLE的命令可以回收表或索引视图中已删除的可变长度列的空间。
下面我们做个测试:
1. --创建测试表
CREATE TABLE testfreespace
( column1 INT
,column2 CHAR(20)
,column3 VARCHAR(8000))
2. --插入数据
DECLARE @count INT;
SET @count = 0;
WHILE @count < 3000
BEGIN
SELECT
@count = @count + 1;
INSERT into testfreespaceVALUES( @count,'test row # '+CAST(@countASVARCHAR(10)),REPLICATE('TestData',
3000)) ;
END
3. --查看使用空间使用情况
SELECT
alloc_unit_type_desc,
page_count,
avg_page_space_used_in_percent,
record_count
FROM sys.dm_db_index_physical_stats(DB_ID('FNDBLogtest'),OBJECT_ID(N'Testfreespace'),NULL,NULL,'Detailed')
结果:
alloc_unit_type_desc page_countavg_page_space_used_in_percent record_count
-------------------------------------------------------------------------------- ------------------------------ --------------------
IN_ROW_DATA 3000 99.27106498640973000
(1 row(s) affected)
4. --删除变长列Column3
ALTER TABLETestfreespaceDROPCOLUMNColumn3
5.使用3脚本查询看到avg_page_space_used_in_percent仍然是99.2710649864097 没有改变。
6. --执行DBCC CLEANTABLE
DBCC CLEANTABLE(FNDBLogTest,"Testfreespace")
7.再次运行3脚本看到下面的结果:
alloc_unit_type_desc page_countavg_page_space_used_in_percentrecord_count
-------------------------------------------------------------------------------- ------------------------------ --------------------
IN_ROW_DATA 3000 0.382999752903385 3000
(1 row(s) affected)
可以看到现在avg_page_space_used_in_percent已经变了,证明空间已经释放。
更多信息参考:DBCCCLEANTABLE (Transact-SQL)http://msdn.microsoft.com/zh-cn/library/ms174418.aspx
分享到:
相关推荐
dbcc showcontig(@table_id) dbcc dbreindex('[HumanResources].[Employee]',' ',5) DBCC INDEXDEFRAG('ADVENTUREWORKS_DATA','[HumanResources].[Employee]') use ADVENTUREWORKS_DATA set @table_id=...
SQL Server 2005完结篇系列之五:使用DBCC命令来进行数据库的维护及性能调节SQL Server 2005完结篇系列之五:使用DBCC命令来进行数据库的维护及性能调节SQL Server 2005完结篇系列之五:使用DBCC命令来进行数据库的...
SQL Server 2000完结篇系列之五:使用DBCC命令来进行数据库的维护及性能调节
Transact-SQL 编程语言提供 DBCC 语句作为 SQL Server 的数据库控制台命令。 DBCC 命令使用输入参数并返回值。所有 DBCC 命令参数都可以接受 Unicode 和 DBCS 文字。
台湾DB World的电子杂志文章,详细讲述了DBCC的使用,适合DBA管理者,(4/4)
Sql-Server实用操作-数据库一致性检测工具(DBCC).pdf
所有的DBCC命令数据库修复数据库修复数据库修复数据库修复数据库修复数据库修复
此文档中详细的记载了,SQL SERVER DBCC命令解释,希望可以帮助到下载的朋友们
台湾DB World的电子杂志文章,详细讲述了DBCC的使用,适合DBA管理者,(2/4)
dbcc输出结果,可以查询得到
微软SQL Server2000DBCC参考
DBCC CHECKIDENT(N’dbo.Orders’, RESEED, 0); DBCC CHECKIDENT 语法 DBCC CHECKIDENT ( table_name [ , { NORESEED | { RESEED [ , new_reseed_value ] } } ] ) [ WITH NO_INFOMSGS ]参数 table_name 是要对其当前...
用sql语句dbcclog查看SQLServer数据库的事务日志[定义].pdf
在危急时刻,数据库一致性检测(DBCC)可能是你最重要的工具。本文向大家简单介绍DBCC的功能,包括:检测表和相关目录的完整性、检测整个数据库、检测数据库页的完整性、重建任何指定表中的目录。
提高SQL Server性能,可通过DBCC DBREINDEX重建索引 提高SQL Server性能,本文将详细介绍DBCC DBREINDEX重建索引的全过程。,详情请看下载 欢迎大家学习! use ADVENTUREWORKS_DATA declare @table_id int set @...
台湾DB World的电子杂志文章,详细讲述了DBCC的使用,适合DBA管理者,(1/4)
SQL Server 2005中的索引架构:抛开DBCC SHOWCONTIG,使用新的函数.pdf
台湾DB World的电子杂志文章,详细讲述了DBCC的使用,适合DBA管理者,(2/4)
同样,对事务日志进行备份也只会截断不活动事务的那部分事务日志,所以打开的事务会导致日志变多(甚至达到物理限制),直到事务被提交或回滚。 要找到最早的活动事务,可以使用DBCC OPENTRAN命令。详细用法见MSDN:...
索引应该尽量小,使用字节数小的列建索引好(参照索引的创建),不要对有限的几个值的字段建单一索引如性别字段。 5、提高网速。 6、扩大服务器的内存,Windows 2000和SQL server 2000能支持4-8G的内存。 配置...