紧急求助!数据库mdf文件增长太快了,不是日志文件!

xiecy77 2011-07-27 01:34:46
his数据库最近增长太快了,基本上每天接近200M,以前每天最多增加5M,数据量和以前基本上差不多的
用exec sp_spaceused查询了其中的一些表与前段时间备份的数据库作了比较,比如
exec sp_spaceused 'MZ_GHDJB'分别对两个数据库查询
name rows reserved data index_size unused
MZ_GHDJB 82515 537960 KB 24744 KB 262224 KB 250992 KB
MZ_GHDJB 281079 378928 KB 34624 KB 293808 KB 50496 KB
第一行对应的数据库前段时间把表中的历史数据删除了一部分,就是现在用的,第二行对应的数据库是历史数据删除前的数据库,第一行rows为82515比第二行的少了近20万行,但是reserved的空间却比下面的多了近200M,这是什么原因啊,正常情况下应该第二行reserved的空间应该比第一行的大很多,怎么解决啊,求各位老师指教!
...全文
220 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
cjh18168 2011-08-08
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 i_element 的回复:]
引用 19 楼 xiecy77 的回复:

我仔细查了一下不是所有的表都是这样的,把相关的表找出来,聚集索引删掉重建就把空间释放出来了,一切正常了,就是不知道是什么原因导致的!谢谢各位


说明这些表经常用删除操作,而删除时,空间并不能释放掉,所以你虽然删除数据了,但只要你的表还在插入数据,表占用的空间就会不断的增大。
[/Quote]

找茬党 2011-07-27
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 xiecy77 的回复:]

我仔细查了一下不是所有的表都是这样的,把相关的表找出来,聚集索引删掉重建就把空间释放出来了,一切正常了,就是不知道是什么原因导致的!谢谢各位
[/Quote]

说明这些表经常用删除操作,而删除时,空间并不能释放掉,所以你虽然删除数据了,但只要你的表还在插入数据,表占用的空间就会不断的增大。
xiecy77 2011-07-27
  • 打赏
  • 举报
回复
我仔细查了一下不是所有的表都是这样的,把相关的表找出来,聚集索引删掉重建就把空间释放出来了,一切正常了,就是不知道是什么原因导致的!谢谢各位
kalor2011 2011-07-27
  • 打赏
  • 举报
回复
我们这边也出现这个问题啊,SQL2000,以前好几年都没什么事,最近MDF每三天增大一个G啊,吓人啊,数据量河访问量都跟以前差不多,不至于啊。。。求高手指点。。。
AcHerat 2011-07-27
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 xiecy77 的回复:]

1.新建一个表把表MZ_GHDJB2,然后把把表MZ_GHDJB数据导入到MZ_GHDJB2中,然后删除MZ_GHDJB,将MZ_GHDJB2更名为MZ_GHDJB.
2.重建MZ_GHDJB聚集索引。
我试了用这个方法是可以的,但是HIS中的表太多了,这样做工作量太大,很多表都有触发器,还有些事关联的,数据量又大,容易出错的,有没有什么更好的办法啊
[/Quote]

把所有表的聚集索引都重建下,再收缩。
找茬党 2011-07-27
  • 打赏
  • 举报
回复
更好的办法就是加硬盘,省心了
xiecy77 2011-07-27
  • 打赏
  • 举报
回复
1.新建一个表把表MZ_GHDJB2,然后把把表MZ_GHDJB数据导入到MZ_GHDJB2中,然后删除MZ_GHDJB,将MZ_GHDJB2更名为MZ_GHDJB.
2.重建MZ_GHDJB聚集索引。
我试了用这个方法是可以的,但是HIS中的表太多了,这样做工作量太大,很多表都有触发器,还有些事关联的,数据量又大,容易出错的,有没有什么更好的办法啊
找茬党 2011-07-27
  • 打赏
  • 举报
回复
不知道说的这200M是指整库,还是指单个表?
xiecy77 2011-07-27
  • 打赏
  • 举报
回复
我现在的情况和你的基本上是一样的,急啊!
xiecy77 2011-07-27
  • 打赏
  • 举报
回复
也就是最近半个多月才增长这么快的
kqserver 2011-07-27
  • 打赏
  • 举报
回复
顶一下 我也是受害者之一 我们的服务器 IBM服务器 至强CPU 硬盘是最新的sc硬盘做的RAD1
操作系统为 WIN2003+SQL2000+sql2000SP4补丁 原来每天10M增长
后来服务器出问题 重做了下操作系统 操作系统仍为WIN2003 +sql2000+sql2000sp4补丁现在每天以200MB的速度增长 现在还没想好怎么处理呢。
xiecy77 2011-07-27
  • 打赏
  • 举报
回复
也就是最近半个多月才增长这么快的
xiecy77 2011-07-27
  • 打赏
  • 举报
回复
数据增长量基本相同的
找茬党 2011-07-27
  • 打赏
  • 举报
回复
现在每天的数据增长与之前(每天5M)时候相比,数据增长量相同?
xiecy77 2011-07-27
  • 打赏
  • 举报
回复
重建了索引,空间减少不多,现在是每天增长200M左右,以前每天增长只有5M,照这个速度几个月磁盘空间就不够了
AcHerat 2011-07-27
  • 打赏
  • 举报
回复
重建一下所有表的索引(聚集索引),再收缩看看!

楼主看看导入到新的库有多大。
快溜 2011-07-27
  • 打赏
  • 举报
回复
整理下磁盘碎片。
找茬党 2011-07-27
  • 打赏
  • 举报
回复
有两个办法:
1.新建一个表把表MZ_GHDJB2,然后把把表MZ_GHDJB数据导入到MZ_GHDJB2中,然后删除MZ_GHDJB,将MZ_GHDJB2更名为MZ_GHDJB.
2.重建MZ_GHDJB聚集索引。
99831323 2011-07-27
  • 打赏
  • 举报
回复
不用收缩,反正空间能用

或者说你不必作任何处理,也不必大惊小怪。

删除后,空间归到unused ,以后增加的数据就会占用,一段时间数据库文件不会增长,好过现在收缩了再增长出来

几百M的大小,差十倍也没多少,不用理他
xiecy77 2011-07-27
  • 打赏
  • 举报
回复
收缩了,不行的,MDF文件中的实际使用空间在增大,不是单纯的文件增大
加载更多回复(1)
//附加数据库 sp_attach_db 当使用 sp_attach_db 系统存储过程附加数据库时。 sp_attach_db:将数据库附加到服务器。 语法 sp_attach_db [ @dbname = ] 'dbname' , [ @filename1 = ] 'filename_n' [ ,...16 ] 参数 [@dbname =] 'dbname' 要附加到服务器的数据库的名称。该名称必须是唯一的。dbname 的数据类型为 sysname,默认值为 NULL。 [@filename1 =] 'filename_n' 数据库文件的物理名称,包括路径。filename_n 的数据类型为 nvarchar(260),默认值为 NULL。最多可以指定 16 个文件名。 参数名称以 @filename1 开始,递增到 @filename16。文件名列表至少必须包括主文件,主文件包含指向数据库中其它文件的系统表。 该列表还必须包括数据库分离后所有被移动的文件。 返回代码值:0(成功)或 1(失败) eg:下面的示例将 pubs 中的两个文件附加到当前服务器。 EXEC sp_attach_db @dbname = N'pubs', @filename1 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf', @filename2 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs_log.ldf' EXEC sp_attach_db @dbname = N'Ty20051029101451aaa', @filename1 = N'd:\5屏幕\Ty20051029101451aaa_data.mdf', @filename2 = N'd:\5屏幕\Ty20051029101451aaa_log.ldf' ---解决问题了 //删除数据库 DROP DATABASE 从Microsoft? SQL Server? 删除一个或多个数据库。删除数据库将删除数据库所使用的数据库文件和磁盘文件。 语法 :DROP DATABASE database_name [ ,...n ] 参数 :database_name 指定要删除的数据库名称。从 master 数据库中执行 sp_helpdb 以查看数据库列表。 eg: exec sp_helpdb database_name exec Drpo DataBase [Ty20051029101451aaa] //分离数据库 可以使用 sp_detach_db 存储过程分离该数据库,然后使用带有 FOR ATTACH 子句的 CREATE DATABASE 重新附加。 sp_detach_db Archive GO CREATE DATABASE Archive ON PRIMARY (FILENAME = 'c:\program files\microsoft sqlserver\mssql\data\archdat1.mdf') FOR ATTACH GO //显示当前数据库信息 --select * from Master..sysDatabases //新建---不行啊 CREATE DATABASE TestOA ALTER DATABASE TestOA SET OFFLINE WITH ROLLBACK IMMEDIATE RESTORE DATABASE TestOA From disk='C:\Documents and Settings\Administrator\桌面\帐套\data\Template.Dat' ALTER DATABASE TestOA SET OFFLINE WITH ROLLBACK IMMEDIATE exec sp_detach_db Km20051030011601 --分离数据库 exec sp_attach_single_file_db km20051030011601,'D:\TestDatabase\Km20051030011601.mdf'--只附加.mdf文件

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧