使用模式 + 文件组或完全独立的数据库(同一实例)对一些大表进行分区?

dim*_*dim 5 database-design sql-server sql-server-2014

我有以下挑战:

我有一个暂存数据库,其中包含几个大表(在 SSD 上),但我开始用完 SSD 上的空间。我使用 SQL Server 2014 BI-Edition(= 关系引擎的标准版),因此开箱即用的表分区不可用。我的方法是将数据拆分到单独的表中,然后将它们连接到一个视图中。

数据本身(大部分)写入一次,然后只能读取。

下面两个建议的更好的解决方案是什么?为什么?

解决方案 A:使用文件组将数据移动到不同的磁盘:

  • 在单独的磁盘(非 SSD、RAID5)上创建两个新文件组
  • 创建多个表(例如,每季度一个)并根据某些规则将旧数据移动到这些表中(例如移动 6 个月之前的数据)
  • 一个文件组是只读的,另一个是读写的。更多的当前数据驻留在读写文件组中,而较旧的数据位于只读文件组中
  • 为所有表创建相同的索引(相同的列)
  • 使用视图透明地访问所有数据

方案B:使用数据库保存历史数据

  • 以或多或少相同的方式实现,但添加一个数据库(在同一实例中)作为附加层

感谢您分享您的想法和建议。

RLF*_*RLF 4

您的问题显然与存储空间有关。

您的 SSD 阵列不够大,无法在 SSD 上保存所有历史记录。

创建另一个文件组是分离存储空间使用的好方法。这样您就可以控制历史数据磁盘阵列上的内容。(在默认文件组以外的文件组上创建对象时,当然必须确保指定您正在使用的文件组。)

根据历史数据的大小,您可能不需要按季度等拆分数据。

例如,您在 SSD 上运行良好,直到空间成为问题。因此,请记住空间是问题所在,您可以问自己以下问题:

  1. 我的索引是否针对此工作负载精心设计?
  2. 我的查询是否需要扫描所有历史数据?(根据您上面的评论,显然不是。)
  3. 维护季度数据库的开销是否会给您带来显着的查询改进?(特别是如果您需要来自多个数据库的数据。)

让事情变得更简单和设计良好应该是首要目标。但是,如果这还不够,那么您应该根据需要添加层。保存性能统计数据将帮助您衡量收益。

有很多网站可以提供帮助。以下是 Glenn Berry 的一组查询:http ://www.sqlskills.com/blogs/glenn/category/dmv-queries/