我们将数据序列化为xml,将其放入文件中,然后从数据库中删除该数据。我们称此过程为“归档”。问题是在归档之前和归档之后,我们必须记录数据库的可用空间大小。我们通过存储过程确定可用空间
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语句不会取消分配页面。因此,该空间不能被其他对象重用。
您可以使用一些选项来取消分配页面:
在线查看MSDN,主题锁定行为https://msdn.microsoft.com/zh-CN/library/ms189835(v=sql.120).aspx
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句