SQL Server 2008 R2 Partycjonowanie - ta sama grupa plików, 1 plik, 2 numery_partycji - POMOC

10

To moja pierwsza partycjonowanie w SQL Server, nauczyłem się z przewodnika Brent Ozar, co jest fantastyczne :)

Kilka razy wpadłem na dziwny scenariusz; kiedy biegnę:

SELECT *
FROM ph.FileGroupDetail
ORDER BY partition_number
Go

Ta sama grupa plików pokazuje dwa razy z 2 różnymi numerami partycji, 1 poprawnie na końcu z wartością zakresu, a drugi na początku z zerową wartością zakresu.

kliknij tutaj, aby powiększyć obraz

wprowadź opis zdjęcia tutaj

Kilka pytań:

  1. Jak to się dzieje, gdzie popełniłem błąd?

  2. Jak rozwiązać problem, to znaczy, jak pozbyć się tego na początku, ponieważ mam już pustą partycję na początku.

Próbowałem usunąć plik (działał, gdy był pusty) i grupa plików, ale grupa plików powiedziała, że ​​nie można jej usunąć.

Czy ktoś może wyjaśnić, jak to się stało i jak pozbyć się wpisu z partycji 2?

Steve
źródło
3
Steve, możesz opublikować swój schemat partycji i funkcję?
PseudoToad,
@steve - naprawdę przydałoby się opublikować ten schemat partycji i działanie zgodnie z żądaniem Gizmo.
Thronk,
1
Czy możesz udostępnić także identyfikator_partycji z sys.partitions?
user_0,

Odpowiedzi:

3

Wyniki wskazują, że w pewnym momencie do funkcji dodano wyraźną granicę partycji NULL, gdy grupa NEXT USEDplików schematu partycji została ustawiona na DailyAlbertFG30. Ponadto nie widzę używanego DailyAlbertFG2. Być może była kiedyś partycja na tej grupie plików, która następnie została scalona.

Poniżej znajduje się skrypt pokazujący, w jaki sposób można utworzyć partycję FG30 z granicą NULL. Granica NULL mogła zostać dodana przypadkowo.

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
Dan Guzman
źródło
0
  1. Nie wiem To nie jest niezwykły przypadek sam w sobie. Możesz dowolnie przypisywać partycje do aplikacjami. Nie musi to być 1: 1. Być może przypadkowo przeszedłeś na niewłaściwą FG lub miałeś złą konfigurację przez krótki okres czasu. Ta nieregularność nie ma się czym martwić , ale oczywiście można ją usunąć.
  2. Możesz pozbyć się jednej z pustych partycji, łącząc jedną z nich w drugą. W sieci są świetne przewodniki, jak to zrobić. W tym przypadku jest to łatwe i natychmiastowe. Możesz także przenieść partycje do żądanego FG, odbudowując je. Odbudowywanie pustych partycji jest natychmiastowe.

Kiedy skończysz sprzątanie i znajdziesz puste FG, możesz je również upuścić.

usr
źródło