Particionamento do SQL Server 2008 R2 - mesmo grupo de arquivos, 1 arquivo, 2 partição_numbers - HELP


10

É a minha primeira vez no particionamento no SQL Server, aprendi com o guia Brent Ozar, que é fantástico :)

Algumas vezes me deparei com um cenário estranho; quando eu corro:

SELECT *
FROM ph.FileGroupDetail
ORDER BY partition_number
Go

O mesmo grupo de arquivos é exibido duas vezes com 2 números de partição diferentes, 1 corretamente no final com um valor de intervalo e o outro no início com um valor de intervalo nulo.

clique aqui para ampliar a imagem

insira a descrição da imagem aqui

Algumas perguntas:

  1. Como isso está acontecendo, onde eu errei?

  2. Como resolvo o problema, isso significa como me livrar do problema no início, pois já tenho uma partição vazia no início.

Tentei excluir o arquivo (funcionou quando estava vazio) e o grupo de arquivos, mas o grupo de arquivos disse que não podia ser excluído.

Alguém pode explicar por favor como isso aconteceu e como se livrar da entrada da partição 2?


3
Steve, você pode postar seu esquema e função de partição?
PseudoToad

@ steve - realmente seria útil para você postar esse esquema de partição e funcionar como o Gizmo solicitou.
Thronk

11
Você pode expor também partition_id de sys.partitions?
USER_0

Respostas:


3

Os resultados indicam que em algum momento um limite explícito da partição NULL foi adicionado à função quando o grupo de NEXT USEDarquivos do esquema de partição foi definido como DailyAlbertFG30. Além disso, não vejo o DailyAlbertFG2 usado. Talvez houvesse uma partição naquele grupo de arquivos que foi posteriormente mesclada.

Abaixo está um script que mostra como uma partição FG30 com o limite NULL pode ser criada. O limite NULL pode ter sido adicionado acidentalmente.

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. Eu não sei. Este não é um caso incomum em si. Você pode atribuir partições livremente a grupos de arquivos. Não precisa ser 1: 1. Talvez você tenha acidentalmente reconstruído o FG errado ou tenha uma configuração ruim por um curto período de tempo. Não se preocupe com esta irregularidade , mas é claro que você pode limpá-la.
  2. Você pode se livrar de uma das partições vazias mesclando uma delas na outra. Existem ótimos guias na web sobre como fazer isso. Isso é fácil de fazer e instantâneo nesse caso. Você também pode mover partições para um FG desejado, reconstruindo-as. A reconstrução de partições vazias é instantânea.

Quando você terminar de limpar e encontrar FGs vazios, poderá removê-los também.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.