[英]SQL Server Partitioning on Date Column
有2个表Doc和DocDetail:
CREATE TABLE [Doc](
[ID] [int] IDENTITY(1,1) NOT NULL,
[DocTypeId] [int] NOT NULL,
[BusinessEntityId] [int] NOT NULL,
[Created] [datetime] NOT NULL CONSTRAINT [DF_Doc_Created] DEFAULT (getdate()),
[Updated] [datetime] NULL CONSTRAINT [DF_Doc_Updated] DEFAULT (getdate()),
[Active] [bit] NOT NULL CONSTRAINT [DF_Doc_Active] DEFAULT ((1)),
[ReadOnly] [bit] NOT NULL CONSTRAINT [DF_Doc_ReadOnly] DEFAULT ((0)),
CONSTRAINT [PK_Doc] PRIMARY KEY CLUSTERED ([ID] ASC) ) ON [PRIMARY]
CREATE TABLE [dbo].[DocDetail](
[ID] [int] IDENTITY(1,1) NOT NULL,
[DocId] [int] NOT NULL,
[FieldId] [int] NOT NULL,
[RowNumber] [int] NULL,
[ParentRowNumber] [int] NULL,
[vString] [varchar](4096) NULL,
[vDate] [datetime] NULL,
[vTime] [time] NULL,
[vInteger] [int] NULL,
[vNumber] [decimal](26, 7) NULL,
[vReal] [float] NULL,
CONSTRAINT [PK_DocDetail] PRIMARY KEY CLUSTERED ([ID] ASC)) ON [PRIMARY]
DocDetail将仅填充vXXX列之一。 其他将为NULL。
对表的所有访问都是通过一些存储的proc和视图进行的。 我可以根据需要添加列(例如DocDetail中的列重复Doc Created日期,并通过触发器填充以进行分区),但是我无法重写该应用程序。
DocDetail拥有超过十亿行,由于新业务,现在每天增加约900万行! 过去,通过将行移动到基于Doc表的Created列的另一个数据库来“归档”数据。 随着时间的推移,随着行“老化”,它们已从该数据库中删除。 但是,其他外部要求使我们无法继续这样做,并且数据正在迅速堆积。 该服务器具有256GB RAM和一个不错的SAN,具有足够的存储空间(到目前为止)。 我一直在玩一个不错的测试环境来验证我的解决方案。
寻找分区。 OLTP的约45%用于最近30天内创建的数据。 从那时起,大约有25%的数据在60天内(即,大于30天,小于90天)。 其余部分会在90天内下降,最长约18个月。 我需要保留7年的数据,但这并不一定要包含在此数据库中。
对分区方案有什么建议吗?
查看我有关有效数据仓库存储模式的SQL PASS演示。
http://craftydba.com/?page_id=880
该演示文稿回顾了以下解决问题的方法。 它具有1.2 M行数据库的工作代码。
Coverage:
1 – What is horizontal partitioning?
2 – Database sharding for daily information.
3 – Working with files and file groups.
3 – Partitioned views for performance.
4 – Table and Index partitions.
5 – Row Data Compression.
6 – Page Data Compression.
7 – Programming a sliding window.
8 – What are Federations in Azure SQL?
至于走哪条路,则取决于您。
分片视图和分区视图都可以使用SQL Server的标准版完成。
数据压缩和表分区在SQL Server的企业版中可用。
由于您是从头开始构建仓库,因此可以更改数据类型以节省空间。
我能够使用压缩和分区将4 TB数据库重组为500 GB。
总之,DATES和INTEGERS都是分区键的理想选择。
在我自己的仓库中,日期维度将日期映射为整数。
在测试环境中进行测试,以了解真正的重建将如何进行。
祝好运。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.