如何绕过sql-server的分区最大值?

Kha*_*han 1 sql-server sql-server-2008 database-partitioning

我的团队正在尝试运行源代码管理中的脚本来创建分区,但我们遇到了以下错误: CREATE/ALTER partition function failed as only a maximum of 1000 partitions can be created.

部分脚本:

CREATE PARTITION FUNCTION [PFDailyPartition](DATETIME)
    AS RANGE RIGHT FOR VALUES ('01/01/2005 00:00:00'
 '01/02/2005 00:00:00'
 '01/03/2005 00:00:00'
 '01/04/2005 00:00:00'
 '01/05/2005 00:00:00'
 '01/06/2005 00:00:00'
 '01/07/2005 00:00:00'
 '01/08/2005 00:00:00'
 '01/09/2005 00:00:00'
 '01/10/2005 00:00:00'
 '01/11/2005 00:00:00'
 '01/12/2005 00:00:00'
 '01/13/2005 00:00:00'
 '01/14/2005 00:00:00'
 etc...
Run Code Online (Sandbox Code Playgroud)

select * from sys.partition_range_values在我们当前的设置上运行显示我们有超过 10,000 个分区。

有什么办法可以绕过这个 1000 限制吗?我们无法弄清楚我们是如何拥有这么多分区的。

这可能是两种设置之间的环境差异吗?

提前致谢!

Pau*_*ams 5

您的分区功能正在按天创建单独的分区。这是很多分区!自 2005 年以来,这大约是 365 * 7 = 2,555 个分区。你真的想要按天分开分区吗?

根据这篇文章,SQL Server 2008 SP2 和 SQL Server 2008 R2 SP1 将限制增加到 15,000 个分区。服务器之间是否存在服务包差异?

引自文章:

问题

SQL Server 2005 引入了表和索引分区。分区可以使大型表和索引更易于管理和扩展。有关分区的详细信息,请参阅分区表和索引 (http://msdn.microsoft.com/en-us/library/ms188706(v=SQL.100).aspx)。在 SQL Server 2005、SQL Server 2008 和 SQL Server 2008 R2 中,分区数限制为 1,000。

客户主要使用分区来促进数据仓库中大型事实表的管理。数据仓库客户通常批量加载数据。每日加载是最常见的模式,但越来越多的客户希望每天加载数据不止一次。由于 1,000 个分区的限制,如果客户每天加载,他们可以在分区表中存储不到三年的数据,而业务需求通常要求将数据保留更长的时间,例如七年。在这种情况下,最多 1,000 个分区成为客户的限制。

如果合并分区过于复杂和耗时,客户更愿意灵活地创建大量分区并在需要时使用它们。在这种情况下,最多 1,000 个分区也成为限制。

解决方案

在 SQL Server 2008 SP2 和 SQL Server 2008 R2 SP1 中,您可以选择使用新的 sp_db_increased_pa​​rtitions 存储过程启用对数据库级粒度的 15,000 个分区的支持。您还可以禁用对数据库的支持(启用后)并将分区数限制设置回 1,000。