我想检查sql server如何消耗磁盘空间来存储数据。我最近只丢了一张大约100GB的表,硬盘仍然保持不变(在丢弃大小为30GB之前,丢弃操作后,大小应该达到130GB)。从web检查后,注意到SQL Server没有自动处理,为了获得SQL Server发布硬盘块,需要进行收缩操作。如果我错了,请纠正我。
现在我的问题是在我删除了30GB的数据后,SQL Server会将其反转以备将来使用,这意味着SQL Server将使用此保留块来处理任何新数据,而不是来自操作系统的请求块。如果我错了,请纠正我。
这里是我从数据库获得的信息,如果我理解正确的话,SQL Server为这个数据文件保留了大约308GB,我们已经使用了大约196GB。因此,任何新数据都会出现在这个数据文件中,SQL Server将使用保留块直到达到308GB,然后从操作系统请求额外的块。我对吗 ?
;with db_file_cte as
(
select
name,
type_desc,
physical_name,
size_mb =
convert(decimal(11, 2), size * 8.0 / 1024),
space_used_mb =
convert(decimal(11, 2), fileproperty(name, 'spaceused') * 8.0 / 1024)
from sys.database_files
) select
name,
type_desc,
physical_name,
size_mb,
space_used_mb,
space_used_percent =
case size_mb
when 0 then 0
else convert(decimal(5, 2), space_used_mb / size_mb * 100)
end
from db_file_cte;
答案 0 :(得分:1)
如果我理解正确,SQL Server保留约308GB 这个数据文件,我们已经使用了大约196GB。所以任何新数据都来了 对于这个数据文件,SQL Server将使用保留块直到它命中 大小308GB然后它从OS请求额外的块。我是对的吗?
是的,你是对的。 SQL Server数据库由磁盘上的文件组成。默认情况下,释放数据库中的空间不会更改文件的大小。
但是,您可能需要验证各个文件的自动增长设置。运行“sp_helpfile”并检查结果集中的maxsize和growth列。
如有必要,您可以缩小数据库(或特定文件)以释放未使用的磁盘空间。 (您也可以将数据库设置为自动缩小,但不建议这样做。)但出于性能原因,通常建议在数据库中留出大量可用空间。数据越不稳定,可用空间就越大。