SQL Server 2008 R2-Partitionierung - gleiche Dateigruppe, 1 Datei, 2 Partitionsnummern - HILFE


10

Es ist mein erster Versuch, in SQL Server zu partitionieren. Ich habe aus dem Brent Ozar-Handbuch gelernt, was fantastisch ist :)

Ein paar Mal bin ich auf ein seltsames Szenario gestoßen; wenn ich renne:

SELECT *
FROM ph.FileGroupDetail
ORDER BY partition_number
Go

Es gibt dieselbe Dateigruppe, die zweimal mit 2 verschiedenen Partitionsnummern angezeigt wird, eine korrekt am Ende mit einem Bereichswert und die andere am Anfang mit einem Nullbereichswert.

Klicken Sie hier, um das Bild zu vergrößern

Geben Sie hier die Bildbeschreibung ein

Einige Fragen:

  1. Wie passiert das, wo bin ich falsch gelaufen?

  2. Wie löse ich das Problem, dh wie entferne ich das Problem am Anfang, da ich am Anfang bereits eine leere Partition habe?

Ich habe versucht, die Datei (funktionierte, wenn sie leer war) und die Dateigruppe zu löschen, aber die Dateigruppe sagte, dass sie nicht gelöscht werden konnte.

Kann jemand bitte erklären, wie dies passiert ist und wie man den Partition 2-Eintrag loswird?


3
Steve, kannst du dein Partitionsschema und deine Funktion veröffentlichen?
PseudoToad

@steve - wäre wirklich nützlich für Sie, um dieses Partitionsschema zu veröffentlichen und wie von Gizmo angefordert zu funktionieren.
Thronk

1
Können Sie auch partition_id aus sys.partitions verfügbar machen?
user_0

Antworten:


3

Die Ergebnisse zeigen, dass der Funktion irgendwann eine explizite NULL-Partitionsgrenze hinzugefügt wurde, als die Partitionsschema- NEXT USEDDateigruppe auf DailyAlbertFG30 gesetzt wurde. Außerdem wird DailyAlbertFG2 nicht verwendet. Vielleicht gab es einmal eine Partition in dieser Dateigruppe, die anschließend zusammengeführt wurde.

Unten finden Sie ein Skript, das zeigt, wie eine FG30-Partition mit der NULL-Grenze erstellt werden kann. Die NULL-Grenze wurde möglicherweise versehentlich hinzugefügt.

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. Ich weiß es nicht. Dies ist per se kein ungewöhnlicher Fall. Sie können Dateigruppen frei Partitionen zuweisen. Es muss nicht 1: 1 sein. Möglicherweise haben Sie versehentlich die falsche FG wiederhergestellt, oder Sie hatten für kurze Zeit eine schlechte Konfiguration. Diese Unregelmäßigkeit ist kein Grund zur Sorge , aber Sie können sie natürlich beseitigen.
  2. Sie können eine der leeren Partitionen entfernen, indem Sie eine davon in die andere zusammenführen. Es gibt großartige Anleitungen im Internet, wie das geht. Dies ist in diesem Fall einfach und sofort möglich. Sie können Partitionen auch in eine gewünschte FG verschieben, indem Sie sie neu erstellen. Das Neuerstellen leerer Partitionen erfolgt sofort.

Wenn Sie mit dem Aufräumen fertig sind und leere FGs finden, können Sie diese auch fallen lassen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.