Partitionnement SQL Server 2008 R2 - même FileGroup, 1 File, 2 partition_numbers - AIDE

10

C'est mon premier essai de partitionnement dans SQL Server, j'ai appris du guide Brent Ozar qui est fantastique :)

Quelques fois, je suis tombé sur un scénario étrange; quand je cours:

SELECT *
FROM ph.FileGroupDetail
ORDER BY partition_number
Go

Il y a le même groupe de fichiers montrant deux fois avec 2 numéros de partition différents, 1 correctement à la fin avec une valeur de plage, l'autre au début avec une valeur de plage nulle.

cliquez ici pour agrandir l'image

entrez la description de l'image ici

Quelques questions:

  1. Comment cela se passe-t-il, où je me suis trompé?

  2. Comment puis-je résoudre le problème, cela signifie comment se débarrasser de celui au début car j'ai déjà une partition vide au début.

J'ai essayé de supprimer le fichier (fonctionnait quand il était vide) et le groupe de fichiers, mais le groupe de fichiers a dit qu'il ne pouvait pas être supprimé.

Quelqu'un peut-il expliquer comment cela s'est produit et comment se débarrasser de l'entrée de la partition 2?

Steve
la source
3
Steve, pouvez-vous publier votre schéma de partition et votre fonction?
PseudoToad du
@steve - serait vraiment utile pour vous de publier ce schéma de partition et de fonctionner comme Gizmo l'a demandé.
Thronk
1
Pouvez-vous exposer également partition_id à partir de sys.partitions?
user_0

Réponses:

3

Les résultats indiquent à un moment donné qu'une limite de partition NULL explicite a été ajoutée à la fonction lorsque le groupe de NEXT USEDfichiers du schéma de partition a été défini sur DailyAlbertFG30. De plus, je ne vois pas DailyAlbertFG2 utilisé. Peut-être y avait-il une fois une partition sur ce groupe de fichiers qui a ensuite été fusionnée.

Vous trouverez ci-dessous un script qui montre comment créer une partition FG30 avec la limite NULL. La limite NULL peut avoir été ajoutée accidentellement.

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
la source
0
  1. Je ne sais pas. Ce n'est pas un cas inhabituel en soi. Vous pouvez librement attribuer des partitions à des groupes de fichiers. Il n'est pas nécessaire que ce soit 1: 1. Peut-être que vous avez accidentellement reconstruit le mauvais FG, ou que vous avez eu une mauvaise configuration pendant une courte période. Cette irrégularité n'a rien à craindre , mais vous pouvez bien sûr la nettoyer.
  2. Vous pouvez vous débarrasser de l'une des partitions vides en fusionnant l'une d'entre elles dans l'autre. Il existe d'excellents guides sur le Web sur la façon de procéder. C'est facile à faire et instantané dans ce cas. Vous pouvez également déplacer des partitions vers un FG souhaité en les reconstruisant. La reconstruction de partitions vides est instantanée.

Lorsque vous avez terminé le nettoyage et que vous trouvez des FG vides, vous pouvez également les déposer.

usr
la source