Sql 在删除大量数据后测量数据库的可用空间
我们将数据序列化为xml,将其放入文件中,然后从数据库中删除该数据。我们称此过程为“归档”。 问题是我们必须在归档之前和之后记录数据库可用空间大小。我们使用存储过程确定可用空间Sql 在删除大量数据后测量数据库的可用空间,sql,sql-server,sql-server-2008-r2,Sql,Sql Server,Sql Server 2008 R2,我们将数据序列化为xml,将其放入文件中,然后从数据库中删除该数据。我们称此过程为“归档”。 问题是我们必须在归档之前和之后记录数据库可用空间大小。我们使用存储过程确定可用空间 ALTER PROCEDURE [dbo].[SP_USED_SPACE] AS BEGIN declare @reservedpages bigint, @dbsize bigint select @reservedpages = sum(a.total_pages) from sys.partiti
ALTER PROCEDURE [dbo].[SP_USED_SPACE]
AS
BEGIN
declare @reservedpages bigint, @dbsize bigint
select @reservedpages = sum(a.total_pages)
from sys.partitions p join sys.allocation_units a on p.partition_id = a.container_id
left join sys.internal_tables it on p.object_id = it.object_id
select @dbsize = sum(convert(bigint,case when status & 64 = 0 then size else 0 end)) from dbo.sysfiles
SELECT (convert (dec (15,2), @dbsize)) * 8192 / 1048576 as database_size,
(case when @dbsize >= @reservedpages then
(convert (dec (15,2),@dbsize) - convert (dec (15,2),@reservedpages))
* 8192 / 1048576 else 0 end) as free_space
END
但在归档之后,该过程返回的值与归档之前几乎或完全相同。嗯,我可以保证删除的数据是相当可观的,比如说在几个表中有几百行
我已经试过:
这种行为的原因可能是什么?如何修复它?当表没有聚集索引时,DELETE语句不会取消分配页面。因此,空间不能被其他对象重用 您可以使用以下选项取消分配页面:
您正在存档的数据库表是从堆中还是具有聚集索引的表中?@CPMunich目前我不能确定,但我认为任何表中都没有聚集索引。我会尽快澄清。试着按照下面的查询进行检查:我们花了2个月的时间来解决这个问题!现在它工作了!每次删除操作后,我都会放置
altertablerebuild
。谢谢!不客气。很高兴知道,那张桌子。。。重建也很有效。