SQL Server中sp

  • 时间:
  • 浏览:0

我我其实类事倒那末 必要大惊小怪,类事空间我其实那末 释放,但会 下次依然并都都都都能否了再次利用,就好比一列火车,每节车厢只载了一半乘客,底下的路程中,并都都都都能否了继续往底下加入新的乘客。如下所示大家插入100000条记录,我我应该 发现页的平均密度变化了,只是空闲的空间被重新利用了。

Avg. Bytes Free per Page

删除后

DELETE dbo.space_test WHERE id %2=0

大家删除了一半记录,照理说,数据使用的空间总量(data)应该变化了。那末 我使用DBCC SHOWCONTIG('space_test')来看看,如下截图所示,

好多好多 只是,大家总是使用sp_spaceused来查看表的空间使用情形,上个月群里有个老外说他使用DELETE删除了数据后,使用sp_spaceused查看,发现该表的分配的空间总量(reserved)与数据使用的空间总量(data)那末 变化,当时和他讨论了并分析了一下导致 着,随手记录了一下类事案例,类事周末刚好很糙时间,正好分析挂接一下类事案例、分享在这篇文章。如下所示,大家先构造数据,大家的测试案例比较极端,只是保证每个页面(page)刚好存储两条记录。如下所示:

62

删除前

大家知道sp_spaceused的精确单位是页。它是根据sys.allocation_units 和sys.partitions 这两张管理视图来计算存储空间的。有只是,这两张表不可能 并能了及时反映出数据的准确信息。并都都都都能否了通过updateusage类事参数,要求SQL Server为类事指令更新管理视图里的统计信息。但会 类事案例中,sp_spaceused不准确的导致 着何必 是不可能 这两张表那末 及时反映出数据的准确信息,但会 实验中按照特殊规律,在每一页都删除根小记录,保留根小记录,导致 着每一页上释放了接近一半的空间,但会 页的填充程度接近1000%,从而出现页面碎片化非常严重的情形,而sp_spaceused的精确单位是页,从而导致 着类事特殊的情形出现。

4077.8

Avg. Page Density (full)

EXEC sp_spaceused 'dbo.space_test'

接下来大家删除了id为偶数的记录。

99.23%

我我应该 发现每页的平均可用字节数(Avg. Bytes Free per Page) 和平均页密度(满)(Avg. Page Density (full))出现了变化。如下对比所示:

49.62%

如下截图所示,大家删除了100000条记录,还剩下100000条记录,但会 该表的分配的空间总量(reserved)与数据使用的空间总量(data)那末 变化,依然是100008KB和100000KB

原文: