SQL Server不使用未分配的空间

时间:2016-09-06 04:30:44

标签: sql-server

我有一个低于自然的生产服务器:

版本: Microsoft SQL Server 2014 - 12.0.4100.1

情况:

每天生成一个新表来跟踪多个事件,比如事件A,B和C.

我们每天都会从超过1个月的表中删除事件A.

基本上,根据(total_pages - used_pa​​ges),事件A的大小会基于事件A的大小声明一个未使用的空间,我想好好利用这个空间,而不是像那样浪费。

当前解决方案:

目前,我们的解决方案是在每次“清洁”后立即重建表格。

所以每个表只会使用它应该的大小,同时将大小释放到数据库,称为“未分配的空间”(请在此时纠正我,如果我错了),使用存储过程“exec sp_spaceused”。 / p>

问题:

我的问题出现了,基于我从网上学到的东西的假设是,未分配的空间是硬盘上已经声明的空间,但尚未分配给任何对象,因此我相信每个新的表创建,它使用未分配的空间,而不是声称更多的硬盘空间。

但这是几天发生的事情:

9月5日,sp_spaceused返回:

database_size:447053.75 MB,未分配的空间:58268.34 MB

9月6日,sp_spaceused返回:

database_size:450773.50 MB,未分配空间:57360.52 MB

由于我还有58GB的未分配空间,为什么sql server需要另外3GB的HD空间,而只使用1GB的未分配空间?

感谢您提前协助。

1 个答案:

答案 0 :(得分:0)

  1. database_size包括数据和日志文件。
  2. 使用'updateusage'选项确保sp_spaceused在您调查此类内容时返回最新数据
  3. unallocated并不总是意味着'已发布的数据库大小'。如果数据文件正在增长(自动增长),则会增加“未分配”大小
  4. 公式很简单:

      

    database_size = reserved + unallocated space + log space