SQL Server 2008 R2分区-相同的文件组,1个文件,2个partition_numbers-帮助


10

我是从Brent Ozar指南中学到的,这是我第一次使用SQL Server进行分区,这真是太棒了:)

几次我遇到了一个奇怪的情况。当我跑步时:

SELECT *
FROM ph.FileGroupDetail
ORDER BY partition_number
Go

有一个相同的文件组两次显示2个不同的partition_number,一个正确地在末尾显示一个范围值,另一个在开始时显示一个空range_value。

点击这里放大图片

在此处输入图片说明

几个问题:

  1. 这是怎么回事,我哪里出错了?

  2. 我该如何解决该问题,这意味着如何在开始时摆脱一个分区,因为开始时我已经有一个空分区。

我曾尝试删除文件(在为空时工作)和文件组,但文件组说无法删除。

有人可以解释一下这是怎么发生的以及如何摆脱第2分区条目吗?


3
史蒂夫,您可以发布您的分区方案和功能吗?
PseudoToad

@steve-对于您按照Gizmo的要求发布该分区方案和功能确实很有用。
Thronk 2015年

1
您还可以从sys.partitions中公开partition_id吗?
user_0 2015年

Answers:


3

结果表明,当将分区方案NEXT USED文件组设置为DailyAlbertFG30 时,在某个点上已向函数添加了明确的NULL分区边界。另外,我看不到使用DailyAlbertFG2。也许该文件组上曾经有一个分区,随后又将其合并。

下面的脚本显示了如何创建具有NULL边界的FG30分区。NULL边界可能是偶然添加的。

CREATE PARTITION FUNCTION DailyAlbertPF1 (datetime2(3)) AS RANGE RIGHT FOR VALUES();
GO
CREATE PARTITION SCHEME DailyAlbertPS1 AS PARTITION DailyAlbertPF1 ALL TO ([DailyAlbertFG1]);
GO
CREATE TABLE dbo.FactAgentAlbertPortalSessionEntries
    (
      DateTimeColumn datetime2(3)
    )
ON  DailyAlbertPS1(DateTimeColumn);
GO

DECLARE @FileGroupNumber int = 1;
DECLARE @DateTimeBoundary datetime2(3) = '2015-04-15T00:00:00.000';
DECLARE @SQL nvarchar(MAX);
WHILE @DateTimeBoundary <= '2015-05-14T00:00:00.000'
BEGIN
    SET @SQL = N'ALTER PARTITION SCHEME DailyAlbertPS1 NEXT USED DailyAlbertFG' + CAST(@FileGroupNumber AS nvarchar(5)) + N';';
    EXEC(@SQL);
    ALTER PARTITION FUNCTION DailyAlbertPF1() SPLIT RANGE(@DateTimeBoundary);
    SET @DateTimeBoundary = DATEADD(day, 1, @DateTimeBoundary);
    SET @FileGroupNumber += 1;
END;
--add NULL boundary on DailyAlbertFG30
SET @DateTimeBoundary = NULL;
ALTER PARTITION SCHEME DailyAlbertPS1 NEXT USED DailyAlbertFG30;
ALTER PARTITION FUNCTION DailyAlbertPF1() SPLIT RANGE(@DateTimeBoundary);
GO

0
  1. 我不知道。事实并非如此。您可以自由地将分区分配给文件组。它不必是1:1。也许您不小心将其重建为错误的FG,或者在短时间内配置不正确。不必担心这种不规则性,但是您当然可以清除它。
  2. 通过将一个空分区合并到另一个空分区中,可以摆脱其中一个空分区。网上有很多很好的指南。在这种情况下,这很容易做到并且很容易。您也可以通过重建分区将其移至所需的FG。重建空分区是即时的。

完成清理后,如果发现空的FG,也可以将其丢弃。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.