繁体   English   中英

SQL Server日期分区栏

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM