use*_*827 4 sql-server disk-space heap fragmentation compression
我的数据库很大,最近我注意到几个月前添加的新表是罪魁祸首。
这是表脚本。
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Entry_tracker](
[S.Number] [int] IDENTITY(1,1) NOT NULL,
[EntryId] [varchar](50) NOT NULL,
[EventNumber] [varchar](18) NOT NULL,
[Data] [varbinary](max) NOT NULL,
[TrackDateTime] [datetime] NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE [dbo].[Entry_tracker] ADD CONSTRAINT [DF_Entry_tracker_TrackDateTime] DEFAULT (getdate()) FOR [TrackDateTime]
GO
Run Code Online (Sandbox Code Playgroud)
我收集了这张表的信息,了解到该表大约有1600万行,表大小为1.4TB。
尽管如此,我认为桌子的大小对于没有。的记录。
应用程序不查询该表。它只是存储来自另一个表的相同条目的不同版本。
我检查了碎片信息,它显示平均碎片为 0,平均空间使用率为 93%。

由于我使用的是 SQL Server 2016,我虽然可以使用表压缩,因此尝试sp_estimate_data_compression_savings估计可能的空间节省。但是,结果显示没有节省。
size_with_current_compression_setting(KB) 等于 size_with_requested_compression_setting(KB)
任何人都可以指导我找到这张表的问题吗?
这非常重要,因为这会占用大量磁盘空间。
感谢你的帮助。
我仍然认为桌子的大小对于没有。的记录。
为什么?是什么让你这么说?
它的作用是存储来自另一个表的相同条目的不同版本。
所以它包含版本,可能大也可能小,特别是考虑到:
[Data] [varbinary](max) NOT NULL,
你有没有检查过datalength()这些行,看看那里的饮食空间是否有一些大行?
在我看来,根据数据,它给出的函数大小似乎是合理的。版本控制很少很小,除非它只是更改了字节,并且您使用各种算法来了解哪些字节、如何以及是否基于以前更改的版本构建。
| 归档时间: |
|
| 查看次数: |
160 次 |
| 最近记录: |