删除大量数据后测量数据库的可用空间

egl74

我们将数据序列化为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

但是,在归档之后,该过程将返回与归档之前几乎相同或完全相同的值。好吧,我可以保证删除的数据是可观的,比如说在几张表中有几百行。

归档前后返回的屏幕截图

截取第一个屏幕快照后不久,通过相同过程返回的屏幕快照(这是我所期望的)

我已经尝试过:

  1. DBCC更新
  2. 发送普通查询,而不使用可以缓存的存储过程
  3. 归档后调用过程之前,请在C#中添加Thread.Sleep(5000)。(这适用于我的本地计算机,但不适用于服务器。增加括号之间的值并不保证它在任何情况下都可以使用)。
  4. 删除数据后执行数据库收缩
  5. 使用不同的方法确定可用空间大小,即使用FILEPROPERTY或sp_spaceused

这种行为可能是什么原因,我该如何解决?

CPMunich

当表没有聚集索引时,DELETE语句不会取消分配页面。因此,该空间不能被其他对象重用。

您可以使用一些选项来取消分配页面:

  1. 在DELETE语句中使用TABLOCK提示
  2. 如果可能,在表上创建聚簇索引,您可以在没有TABLOCK提示的情况下进行删除

在线查看MSDN,主题锁定行为https://msdn.microsoft.com/zh-CN/library/ms189835(v=sql.120).aspx

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

PostgreSQL-完整数据库中的可用空间

来自分类Dev

如何计算Teradata数据库中的可用空间

来自分类Dev

mysql数据库没有可用空间

来自分类Dev

数据库备份后缺少大量帖子

来自分类Dev

处理包含大量数据的列(空间列等)时加快访问数据库的策略

来自分类Dev

测量sqlite数据库上的负载

来自分类Dev

设置数据库以导入大量数据

来自分类Dev

从工作空间中删除数据库引用

来自分类Dev

具有使用空间和可用空间的Oracle数据库大小(GB)

来自分类Dev

硬盘空间与数据库空间

来自分类Dev

从数据库中进行大量提取后如何存储数据?的PHP

来自分类Dev

neo4j“空”数据库占用大量磁盘空间

来自分类Dev

在Oracle空间数据库中查找与大量点最近的线

来自分类Dev

删除android数据库后,getReadableDatabase()将不会创建新数据库

来自分类Dev

即使删除数据库文件后数据库也已经存在

来自分类Dev

更改模型类后删除和更新数据库?

来自分类Dev

从数据库中删除记录后,DBGrid不刷新

来自分类Dev

从SQL数据库删除条目后出现Nullpointer异常

来自分类Dev

从数据库中删除记录后,DBGrid不刷新

来自分类Dev

从数据库中删除项目后刷新jtable

来自分类Dev

删除行后,SQLite数据库无法正确更新

来自分类Dev

某些不活动后EF删除数据库

来自分类Dev

在“删除后”挂钩中获取数据库操作的状态

来自分类Dev

SQL:删除内容后如何更改数据库?

来自分类Dev

本周门户更新后如何删除DocumentDB数据库?

来自分类Dev

删除数据库条目后刷新列表视图

来自分类Dev

大量的PHP阵列与MySQL数据库?

来自分类Dev

数据库中的大量列

来自分类Dev

数据库无法保存大量内容

Related 相关文章

热门标签

归档