----为什么DBCC SHRINKFILE会不起作用----
-->>TravyLee生成测试数据
if OBJECT_ID('testdb')is not null
drop database testdb
go
create database testdb;
go
use testdb
go
if OBJECT_ID('test') is not null
drop table test
go
create table test
(
a int,
b nvarchar(3900)
)
go
declare @i int
set @i=1
while @i<=1000
begin
insert into test VALUES( 1,REPLICATE(N'a',3900))
insert into test VALUES( 2,REPLICATE(N'b',3900))
insert into test VALUES( 3,REPLICATE(N'c',3900))
insert into test VALUES( 4,REPLICATE(N'd',3900))
insert into test VALUES( 5,REPLICATE(N'e',3900))
insert into test VALUES( 6,REPLICATE(N'f',3900))
insert into test VALUES( 7,REPLICATE(N'g',3900))
insert into test VALUES( 8,REPLICATE(N'h',3900))
set @i=@i+1
end
--select * from test
使用DBCC SHOWCONTIG命令来查看这个表的存储数据
dbcc showcontig('test')
--结果一
/*
DBCC SHOWCONTIG 正在扫描 'test' 表...
表: 'test' (2121058592);索引 ID: 0,数据库 ID: 9
已执行 TABLE 级别的扫描。
- 扫描页数................................: 8000
- 扫描区数..............................: 1002
- 区切换次数..............................: 1001
- 每个区的平均页数........................: 8.0
- 扫描密度 [最佳计数:实际计数].......: 99.80% [1000:1002]
- 区扫描碎片 ..................: 0.20%
- 每页的平均可用字节数.....................: 279.0
- 平均页密度(满).....................: 96.55%
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
*/
从上述结果中可以看到这个表的数据的存储申请了8000页
现在删除每个区里面的7个页面,只保留a=5的这些记录
delete test where a<>5
go
使用系统存储过程sp_spaceused 查看表的空间信息
sp_spaceused test
go
/*
name rows reserved data index_size unused
-------- ----------- -- -------------------------------------------
test 1000 64008 KB 32992 KB 8 KB 31008 KB
*/
使用DBCC SHOWCONTIG命令查看存储情况
DBCC SHOWCONTIG(test)
--结果二
/*
DBCC SHOWCONTIG 正在扫描 'test' 表...
表: 'test' (2121058592);索引 ID: 0,数据库 ID: 9
已执行 TABLE 级别的扫描。
- 扫描页数................................: 4124
- 扫描区数..............................: 1002
- 区切换次数..............................: 1001
- 每个区的平均页数........................: 4.1
- 扫描密度 [最佳计数:实际计数].......: 51.50% [516:1002]
- 区扫描碎片 ..................: 0.20%
- 每页的平均可用字节数.....................: 6199.0
- 平均页密度(满).....................: 23.41%
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
*/
我们把结果一和结果二做一个比较
-------------------------------------------
结果 扫描页数 扫描区数
-------------------------------------------
一 8000 1002
-------------------------------------------
二 4124 1002
-------------------------------------------
通过上面的表的数据的对比我们容易发现还有将近一半的页面没有被释放
这时我们来对我们去对文件进行收缩:
DBCC SHRINKFILE(1,40)
/*
DbId FileId CurrentSize MinimumSize UsedPages EstimatedPages
详细解决方案
怎么解决DBCC SHRINKFILE不起作用
热度:57 发布时间:2016-04-25 00:41:20.0
相关解决方案
- jsp div嵌套jsp body onload()不起作用,该怎么解决
- !getHibernateTemplate.update()不起作用
- Swing: removeAll()不起作用!求大牛抢救~
- Response.Write("<script>alert('')</script>"); 不起作用,该怎么处理
- table的宽度width="100%"不起作用,该怎么解决
- 存储过程 不起作用
- iframe 不起作用?解决思路
- text 的回车事件,为什么event.keyCode==13 不起作用 ?解决方案
- google earth IE8上面height:100%;不起作用
- :return false 不起作用
- 调用微信JS扫一扫接口,不起作用,请大神帮忙,该如何处理
- ajax post请求,不起作用,帮忙看一下。该怎么处理
- 在什么情况下oracle的collection.extend 不起作用,该如何处理
- 为啥like里面用[]和^不起作用
- 为何like里面用[]和^不起作用
- dbcc checktable出来的异常怎么修正
- dbcc checkdb('db name')的有关问题
- dbcc checkdb repair_allow_data_loss解决思路
- 游标内更新临时表可能表变量 不起作用
- :可能发生了架构损坏。请运行 DBCC CHECKCATALOG
- DBCC 输出了异常信息
- 压缩数据库 DBCC SHRINKDATABASE 有关问题
- Qt:WindowStaysOnTopHint 不起作用,该如何解决
- trimmed()不起作用,该如何处理
- Dbcc Shrinkfile('SMT_Data2',EMPTYFILE )解决思路
- dbcc showconfit 整理碎片请问下各位
- 数据库不能附加。dbcc rebuild_log('aaa','D:\aaa.ldf')出现这样的异常怎么解决!
- DBCC SHRINKFILE的有关问题
- DBCC SHRINKFILE 的一个有关问题
- dbcc checktable之后的报错解决方法