我的数据库很大,最近我注意到几个月前添加的一个新表是罪魁祸首。
这是表格脚本。
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
我收集了这张表的信息,得知这张表大约有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()
这些行,看看你那里的用餐空间是否有一些大的行?在我看来,根据数据,赋予函数的大小似乎是合理的。版本控制很少很小,除非它只是更改了字节,并且您使用各种算法来了解哪些字节、如何以及它是否基于先前更改的版本。