SQL Server中sp

  • 时间:
  • 浏览:1

49.62%

大伙知道sp_spaceused的精确单位是页。它是根据sys.allocation_units 和sys.partitions 这两张管理视图来计算存储空间的。有以前,这两张表肯都要及时反映出数据的准确信息。都要通过updateusage你类似于于 参数,要求SQL Server为你类似于于 指令更新管理视图里的统计信息。后来 你类似于于 案例中,sp_spaceused不准确的原因并都要肯能这两张表没办法 及时反映出数据的准确信息,后来 实验中按照特殊规律,在每一页都删除一条记录,保留一条记录,原因每一页上释放了接近一半的空间,后来 页的填充程度接近100%,从而出先页面碎片化非常严重的情况,而sp_spaceused的精确单位是页,从而原因你类似于于 特殊的情况出先。

如下截图所示,大伙删除了1000条记录,还剩下1000条记录,后来 该表的分配的空间总量(reserved)与数据使用的空间总量(data)没办法 变化,依然是10008KB和10000KB

删除前

99.23%

嘴笨 你类似于于 倒没办法 必要大惊小怪,你类似于于 空间嘴笨 没办法 释放,后来 下次依然都要再次利用,就好比一列火车,每节车厢只载了一半乘客,上边的路程中,都要继续往上边加入新的乘客。如下所示大伙插入1000条记录,让我发现页的平均密度变化了,以前空闲的空间被重新利用了。

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

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

EXEC sp_spaceused 'dbo.space_test'

DELETE dbo.space_test WHERE id %2=0

Avg. Page Density (full)

4077.8

后来 以前,大伙无缘无故使用sp_spaceused来查看表的空间使用情况,上个月群里有个女女明星微博 说他使用DELETE删除了数据后,使用sp_spaceused查看,发现该表的分配的空间总量(reserved)与数据使用的空间总量(data)没办法 变化,当时和他讨论了并分析了一下原因,随手记录了一下你类似于于 案例,你类似于于 周末刚好怪怪的时间,正好分析收集一下你类似于于 案例、分享在这篇文章。如下所示,大伙先构造数据,大伙的测试案例比较极端,以前保证每个页面(page)刚好存储两条记录。如下所示:

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

Avg. Bytes Free per Page

62

删除后