关于sql server2000删除数据和.mdf文件大小问题

时间:2022-05-21 19:11:19
例如  数据库 中就个表记录1000条,其数据文件(.mdf文件)大小是10M,现在我用delete 语句删除 这1000条记录,然后再添加1000条记录(和之前删除的1000记录大小一样),请问  其数据文件(.mdf文件)大小 会不会发生变化????

18 个解决方案

#1


我看会更大。

#2


那得看你这1000条记录到底有多大。
#1.首先,在空间充裕的情况下,DELETE掉的数据空间,是不会自动马上回收的。
#2.如果数据库空间足够大,不会扩展数据库空间(即mdf文件的大小)
#3.如果系统觉得空间不够了,就会按照数据库的增长规则,增长数据库。

#3


引用 1 楼 DBA_Huangzj 的回复:
我看会更大。


请问楼主 ,若不想变大,如何删除数据记录???

#4


你可以先delete完再插入,在看看有无可收缩空间。主要关注点还是区/页有没有被回收

#5


引用 2 楼 wwwwgou 的回复:
那得看你这1000条记录到底有多大。
#1.首先,在空间充裕的情况下,DELETE掉的数据空间,是不会自动马上回收的。
#2.如果数据库空间足够大,不会扩展数据库空间(即mdf文件的大小)
#3.如果系统觉得空间不够了,就会按照数据库的增长规则,增长数据库。


这里 是假如:假如1000条记录就是10M,正好充满了整个数据库空间。我把 这1K条记录删除(用delete)后,数据库空间 大小不变,还是10M,那么我再添加1K条记录,那么数据库空间大小,也就是 .mdf文件大小 会变大吗????如果会变大,那么怎么做才能让他不变大???请楼上高手指教,谢谢!

#6


指定数据库固定大小,取消自动增长。

#7


引用 6 楼 wwwwgou 的回复:
指定数据库固定大小,取消自动增长。


如果 依照您这样做,指定数据库固定大小,取消自动增长。那么  删除 1000条记录后,再增加1000条记录会不会报错???(这样还能不能再增加1000条记录了????)

#8


引用 7 楼 yunankuangke 的回复:
Quote: 引用 6 楼 wwwwgou 的回复:

指定数据库固定大小,取消自动增长。


如果 依照您这样做,指定数据库固定大小,取消自动增长。那么  删除 1000条记录后,再增加1000条记录会不会报错???(这样还能不能再增加1000条记录了????)

肯定报呀。楼主还是直接说自己的目的吧?

#9


引用 8 楼 wwwwgou 的回复:
Quote: 引用 7 楼 yunankuangke 的回复:

Quote: 引用 6 楼 wwwwgou 的回复:

指定数据库固定大小,取消自动增长。


如果 依照您这样做,指定数据库固定大小,取消自动增长。那么  删除 1000条记录后,再增加1000条记录会不会报错???(这样还能不能再增加1000条记录了????)

肯定报呀。楼主还是直接说自己的目的吧?


我的目的是这样的,就是说,我的.mdf文件现在已经  400G了,我不想让.mdf文件变大了,所以,我得删除 表中的记录,但是,我想知道,删除后,再增加 数据,会不会还是是.mdf文件变大? 此外,还有啥方法能让.mdf文件不会变大(说明下,数据库中的表是不断的接收新数据)???请楼上高手指点 

#10


#1.只有数据库空间用尽时,数据库才会自动增长。楼主可以测试一下,删除些数据,再插些数据,新插入的数据,会不会用掉删除数据的空间。
#2.一般来说,数据库一定要设置自动增长(除非你做测试),防止没有空间而报错。但增长的方式一般选择按固定大小(比如每次增长5G)来增长,以免自动增长时由于时间过长,导致那一时段的事务回滚。
#3.删除记录和增加记录,都会影响日志文件的大小。也需要考虑。其实,日志文件才是最吃硬盘的。
所以我认为,你只用把旧数据,归档到另外的数据库里即可。自动增长还是要的。

#11


引用 10 楼 wwwwgou 的回复:
#1.只有数据库空间用尽时,数据库才会自动增长。楼主可以测试一下,删除些数据,再插些数据,新插入的数据,会不会用掉删除数据的空间。
#2.一般来说,数据库一定要设置自动增长(除非你做测试),防止没有空间而报错。但增长的方式一般选择按固定大小(比如每次增长5G)来增长,以免自动增长时由于时间过长,导致那一时段的事务回滚。
#3.删除记录和增加记录,都会影响日志文件的大小。也需要考虑。其实,日志文件才是最吃硬盘的。
所以我认为,你只用把旧数据,归档到另外的数据库里即可。自动增长还是要的。



您好,归档到另外的数据库?怎么归档?还有 归档后就腾出空间了吗?比如说 归档了100条记录,我再添加80条记录会不会使.mdf文件继续变大???

#12


引用 11 楼 yunankuangke 的回复:
Quote: 引用 10 楼 wwwwgou 的回复:

#1.只有数据库空间用尽时,数据库才会自动增长。楼主可以测试一下,删除些数据,再插些数据,新插入的数据,会不会用掉删除数据的空间。
#2.一般来说,数据库一定要设置自动增长(除非你做测试),防止没有空间而报错。但增长的方式一般选择按固定大小(比如每次增长5G)来增长,以免自动增长时由于时间过长,导致那一时段的事务回滚。
#3.删除记录和增加记录,都会影响日志文件的大小。也需要考虑。其实,日志文件才是最吃硬盘的。
所以我认为,你只用把旧数据,归档到另外的数据库里即可。自动增长还是要的。



您好,归档到另外的数据库?怎么归档?还有 归档后就腾出空间了吗?比如说 归档了100条记录,我再添加80条记录会不会使.mdf文件继续变大???

1、归档方法很多,最原始的方法是,比如表A存放一年的数据,有时间列,但是你只要一个月的数据,那么可以select * into [归档库].[dbo].[归档表] from tb where 时间列>特定时间,然后delete 掉这部分数据,最好重建聚集索引,重组一下空间。
2、归档了如果没删100条数据,再加肯定加空间(前提是你的数据库空间已经不够了,需要增长,否则你看不出大小,除非用其他手段),如果删了,再插入一般会重用的。

#13


引用 11 楼 yunankuangke 的回复:
您好,归档到另外的数据库?怎么归档?还有 归档后就腾出空间了吗?比如说 归档了100条记录,我再添加80条记录会不会使.mdf文件继续变大???

参考版主的回答。会重用。
兄弟,你知道得太多了 关于sql server2000删除数据和.mdf文件大小问题

#14


关于sql server2000删除数据和.mdf文件大小问题又加班了

#15


引用 13 楼 wwwwgou 的回复:
Quote: 引用 11 楼 yunankuangke 的回复:

您好,归档到另外的数据库?怎么归档?还有 归档后就腾出空间了吗?比如说 归档了100条记录,我再添加80条记录会不会使.mdf文件继续变大???

参考版主的回答。会重用。
兄弟,你知道得太多了 关于sql server2000删除数据和.mdf文件大小问题

非常感谢 版主和Shawn。会重用是啥意思? 是说 删除100条记录留下的空间 会被 新增的100条记录占用???如果这样的话,是不是说  .mdf文件不会变大?(这里假设 删除和新增100条记录大小是一样的)。请 版主 赐教?
还有个疑问,如果上述的 .mdf文件不会变大,就没必要归档了。版主说的归档是不是相当于将数据备份啊?

#16


#1.会重用,是你说的这个意思。
但实际上,系统以8K为一个页,以页作为基本的存储单位,删除数据后,如果页回收不了,还是无法重复利用。但这儿讲的话,就不是一句话两句话能说的清楚了。
#2.归档的意思是,把此表中的数据,移动到另外的数据库中的表中去。
建议楼主在数据库有空余,但无法重复利用时,收缩数据库文件,以达到收回空间的目的。

#17


引用 16 楼 wwwwgou 的回复:
#1.会重用,是你说的这个意思。
但实际上,系统以8K为一个页,以页作为基本的存储单位,删除数据后,如果页回收不了,还是无法重复利用。但这儿讲的话,就不是一句话两句话能说的清楚了。
#2.归档的意思是,把此表中的数据,移动到另外的数据库中的表中去。
建议楼主在数据库有空余,但无法重复利用时,收缩数据库文件,以达到收回空间的目的。


考虑过 收缩数据库,但是不敢用,因为收缩数据库可能会对数据库性能有很大影响,这样就得不偿失了,所以没敢用。 现在的问题是,什么情况下 无法重复利用? 1楼版主 回答是 我看会更大,这个意思就是 说明了 无法重复利用,我想问有没有好的办法能是 删除后的空间 一定能重复利用???(除了收缩数据库这个方法外)

#18


归档 或者重组数据  10M  几秒的事情

#1


我看会更大。

#2


那得看你这1000条记录到底有多大。
#1.首先,在空间充裕的情况下,DELETE掉的数据空间,是不会自动马上回收的。
#2.如果数据库空间足够大,不会扩展数据库空间(即mdf文件的大小)
#3.如果系统觉得空间不够了,就会按照数据库的增长规则,增长数据库。

#3


引用 1 楼 DBA_Huangzj 的回复:
我看会更大。


请问楼主 ,若不想变大,如何删除数据记录???

#4


你可以先delete完再插入,在看看有无可收缩空间。主要关注点还是区/页有没有被回收

#5


引用 2 楼 wwwwgou 的回复:
那得看你这1000条记录到底有多大。
#1.首先,在空间充裕的情况下,DELETE掉的数据空间,是不会自动马上回收的。
#2.如果数据库空间足够大,不会扩展数据库空间(即mdf文件的大小)
#3.如果系统觉得空间不够了,就会按照数据库的增长规则,增长数据库。


这里 是假如:假如1000条记录就是10M,正好充满了整个数据库空间。我把 这1K条记录删除(用delete)后,数据库空间 大小不变,还是10M,那么我再添加1K条记录,那么数据库空间大小,也就是 .mdf文件大小 会变大吗????如果会变大,那么怎么做才能让他不变大???请楼上高手指教,谢谢!

#6


指定数据库固定大小,取消自动增长。

#7


引用 6 楼 wwwwgou 的回复:
指定数据库固定大小,取消自动增长。


如果 依照您这样做,指定数据库固定大小,取消自动增长。那么  删除 1000条记录后,再增加1000条记录会不会报错???(这样还能不能再增加1000条记录了????)

#8


引用 7 楼 yunankuangke 的回复:
Quote: 引用 6 楼 wwwwgou 的回复:

指定数据库固定大小,取消自动增长。


如果 依照您这样做,指定数据库固定大小,取消自动增长。那么  删除 1000条记录后,再增加1000条记录会不会报错???(这样还能不能再增加1000条记录了????)

肯定报呀。楼主还是直接说自己的目的吧?

#9


引用 8 楼 wwwwgou 的回复:
Quote: 引用 7 楼 yunankuangke 的回复:

Quote: 引用 6 楼 wwwwgou 的回复:

指定数据库固定大小,取消自动增长。


如果 依照您这样做,指定数据库固定大小,取消自动增长。那么  删除 1000条记录后,再增加1000条记录会不会报错???(这样还能不能再增加1000条记录了????)

肯定报呀。楼主还是直接说自己的目的吧?


我的目的是这样的,就是说,我的.mdf文件现在已经  400G了,我不想让.mdf文件变大了,所以,我得删除 表中的记录,但是,我想知道,删除后,再增加 数据,会不会还是是.mdf文件变大? 此外,还有啥方法能让.mdf文件不会变大(说明下,数据库中的表是不断的接收新数据)???请楼上高手指点 

#10


#1.只有数据库空间用尽时,数据库才会自动增长。楼主可以测试一下,删除些数据,再插些数据,新插入的数据,会不会用掉删除数据的空间。
#2.一般来说,数据库一定要设置自动增长(除非你做测试),防止没有空间而报错。但增长的方式一般选择按固定大小(比如每次增长5G)来增长,以免自动增长时由于时间过长,导致那一时段的事务回滚。
#3.删除记录和增加记录,都会影响日志文件的大小。也需要考虑。其实,日志文件才是最吃硬盘的。
所以我认为,你只用把旧数据,归档到另外的数据库里即可。自动增长还是要的。

#11


引用 10 楼 wwwwgou 的回复:
#1.只有数据库空间用尽时,数据库才会自动增长。楼主可以测试一下,删除些数据,再插些数据,新插入的数据,会不会用掉删除数据的空间。
#2.一般来说,数据库一定要设置自动增长(除非你做测试),防止没有空间而报错。但增长的方式一般选择按固定大小(比如每次增长5G)来增长,以免自动增长时由于时间过长,导致那一时段的事务回滚。
#3.删除记录和增加记录,都会影响日志文件的大小。也需要考虑。其实,日志文件才是最吃硬盘的。
所以我认为,你只用把旧数据,归档到另外的数据库里即可。自动增长还是要的。



您好,归档到另外的数据库?怎么归档?还有 归档后就腾出空间了吗?比如说 归档了100条记录,我再添加80条记录会不会使.mdf文件继续变大???

#12


引用 11 楼 yunankuangke 的回复:
Quote: 引用 10 楼 wwwwgou 的回复:

#1.只有数据库空间用尽时,数据库才会自动增长。楼主可以测试一下,删除些数据,再插些数据,新插入的数据,会不会用掉删除数据的空间。
#2.一般来说,数据库一定要设置自动增长(除非你做测试),防止没有空间而报错。但增长的方式一般选择按固定大小(比如每次增长5G)来增长,以免自动增长时由于时间过长,导致那一时段的事务回滚。
#3.删除记录和增加记录,都会影响日志文件的大小。也需要考虑。其实,日志文件才是最吃硬盘的。
所以我认为,你只用把旧数据,归档到另外的数据库里即可。自动增长还是要的。



您好,归档到另外的数据库?怎么归档?还有 归档后就腾出空间了吗?比如说 归档了100条记录,我再添加80条记录会不会使.mdf文件继续变大???

1、归档方法很多,最原始的方法是,比如表A存放一年的数据,有时间列,但是你只要一个月的数据,那么可以select * into [归档库].[dbo].[归档表] from tb where 时间列>特定时间,然后delete 掉这部分数据,最好重建聚集索引,重组一下空间。
2、归档了如果没删100条数据,再加肯定加空间(前提是你的数据库空间已经不够了,需要增长,否则你看不出大小,除非用其他手段),如果删了,再插入一般会重用的。

#13


引用 11 楼 yunankuangke 的回复:
您好,归档到另外的数据库?怎么归档?还有 归档后就腾出空间了吗?比如说 归档了100条记录,我再添加80条记录会不会使.mdf文件继续变大???

参考版主的回答。会重用。
兄弟,你知道得太多了 关于sql server2000删除数据和.mdf文件大小问题

#14


关于sql server2000删除数据和.mdf文件大小问题又加班了

#15


引用 13 楼 wwwwgou 的回复:
Quote: 引用 11 楼 yunankuangke 的回复:

您好,归档到另外的数据库?怎么归档?还有 归档后就腾出空间了吗?比如说 归档了100条记录,我再添加80条记录会不会使.mdf文件继续变大???

参考版主的回答。会重用。
兄弟,你知道得太多了 关于sql server2000删除数据和.mdf文件大小问题

非常感谢 版主和Shawn。会重用是啥意思? 是说 删除100条记录留下的空间 会被 新增的100条记录占用???如果这样的话,是不是说  .mdf文件不会变大?(这里假设 删除和新增100条记录大小是一样的)。请 版主 赐教?
还有个疑问,如果上述的 .mdf文件不会变大,就没必要归档了。版主说的归档是不是相当于将数据备份啊?

#16


#1.会重用,是你说的这个意思。
但实际上,系统以8K为一个页,以页作为基本的存储单位,删除数据后,如果页回收不了,还是无法重复利用。但这儿讲的话,就不是一句话两句话能说的清楚了。
#2.归档的意思是,把此表中的数据,移动到另外的数据库中的表中去。
建议楼主在数据库有空余,但无法重复利用时,收缩数据库文件,以达到收回空间的目的。

#17


引用 16 楼 wwwwgou 的回复:
#1.会重用,是你说的这个意思。
但实际上,系统以8K为一个页,以页作为基本的存储单位,删除数据后,如果页回收不了,还是无法重复利用。但这儿讲的话,就不是一句话两句话能说的清楚了。
#2.归档的意思是,把此表中的数据,移动到另外的数据库中的表中去。
建议楼主在数据库有空余,但无法重复利用时,收缩数据库文件,以达到收回空间的目的。


考虑过 收缩数据库,但是不敢用,因为收缩数据库可能会对数据库性能有很大影响,这样就得不偿失了,所以没敢用。 现在的问题是,什么情况下 无法重复利用? 1楼版主 回答是 我看会更大,这个意思就是 说明了 无法重复利用,我想问有没有好的办法能是 删除后的空间 一定能重复利用???(除了收缩数据库这个方法外)

#18


归档 或者重组数据  10M  几秒的事情