Partizionamento di SQL Server 2008 R2 - stesso gruppo di file, 1 file, 2 partition_numbers - HELP


10

È il mio primo tentativo di partizionamento in SQL Server, ho imparato dalla guida di Brent Ozar che è fantastica :)

Alcune volte mi sono imbattuto in uno strano scenario; quando corro:

SELECT *
FROM ph.FileGroupDetail
ORDER BY partition_number
Go

C'è lo stesso filegroup che mostra due volte con 2 partizione_ numero diversi, 1 correttamente alla fine con un valore di intervallo, l'altro all'inizio con un intervallo_valore nullo.

clicca qui per ingrandire l'immagine

inserisci qui la descrizione dell'immagine

Coppia di domande:

  1. Come sta succedendo, dove ho sbagliato?

  2. Come posso risolvere il problema, ciò significa come sbarazzarsi di quello all'inizio poiché ho già una partizione vuota all'inizio.

Ho provato a eliminare il file (funzionava quando era vuoto) e il filegroup, ma il filegroup ha detto che non poteva essere eliminato.

Qualcuno può spiegare per favore come è successo e come sbarazzarsi della voce della partizione 2?


3
Steve, puoi pubblicare il tuo schema di partizione e la tua funzione?
PseudoToad,

@steve - sarebbe davvero utile per te pubblicare quello schema di partizione e funzionare come richiesto da Gizmo.
Thronk,

1
Puoi esporre anche partition_id da sys.partitions?
user_0

Risposte:


3

I risultati indicano che a un certo punto è stato aggiunto un limite esplicito alla partizione NULL alla funzione quando il NEXT USEDfilegroup dello schema di partizione è stato impostato su DailyAlbertFG30. Inoltre, non vedo DailyAlbertFG2 usato. Forse c'era una volta una partizione su quel filegroup che è stata successivamente unita.

Di seguito è riportato uno script che mostra come è possibile creare una partizione FG30 con il limite NULL. Il limite NULL potrebbe essere stato aggiunto accidentalmente.

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. Non lo so. Questo non è un caso insolito di per sé. Puoi assegnare liberamente le partizioni ai filegroup. Non deve essere 1: 1. Forse hai accidentalmente ricostruito l'FG sbagliato o hai avuto una configurazione errata per un breve periodo di tempo. Questa irregolarità non è nulla di cui preoccuparsi , ma puoi ovviamente ripulirla.
  2. È possibile eliminare una delle partizioni vuote unendone una all'altra. Ci sono ottime guide sul web su come farlo. Questo è facile da fare e istantaneo in questo caso. È inoltre possibile spostare le partizioni su un FG desiderato ricostruendole. La ricostruzione di partizioni vuote è immediata.

Quando hai finito di ripulire e trovi FG vuote, puoi anche lasciarle cadere.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.