Particionamiento de SQL Server 2008 R2: mismo grupo de archivos, 1 archivo, 2 números de partición - AYUDA

10

Es mi primer intento de particionar en SQL Server, aprendí de la guía de Brent Ozar que es fantástico :)

Algunas veces me he encontrado con un escenario extraño; cuando corro:

SELECT *
FROM ph.FileGroupDetail
ORDER BY partition_number
Go

Hay el mismo grupo de archivos que se muestra dos veces con 2 números de partición diferentes, 1 correctamente al final con un valor de rango y el otro al principio con un valor de rango nulo.

haga clic aquí para ampliar la imagen

ingrese la descripción de la imagen aquí

Par de preguntas:

  1. ¿Cómo está pasando esto? ¿Dónde me he equivocado?

  2. ¿Cómo resuelvo el problema? Eso significa cómo deshacerme del uno al principio, ya que al principio ya tengo una partición vacía.

Intenté eliminar el archivo (funcionaba cuando estaba vacío) y el grupo de archivos, pero el grupo de archivos dijo que no se podía eliminar.

¿Alguien puede explicar por favor cómo sucedió esto y cómo deshacerse de la entrada de la partición 2?

Steve
fuente
3
Steve, ¿puedes publicar tu esquema y función de partición?
PseudoToad
@steve: realmente sería útil para ti publicar ese esquema de partición y funcionar como Gizmo solicitó.
Thronk
1
¿Puedes exponer también la partición_id de sys.partitions?
user_0

Respuestas:

3

Los resultados indican que en algún momento se agregó un límite de partición NULL explícito a la función cuando el grupo de NEXT USEDarchivos del esquema de partición se estableció en DailyAlbertFG30. Además, no veo que se use DailyAlbertFG2. Quizás hubo una vez una partición en ese grupo de archivos que posteriormente se fusionó.

A continuación se muestra un script que muestra cómo se puede crear una partición FG30 con el límite NULL. El límite NULL podría haberse agregado 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
Dan Guzman
fuente
0
  1. No lo sé. Este no es un caso inusual per se. Puede asignar particiones libremente a grupos de archivos. No tiene que ser 1: 1. Tal vez accidentalmente reconstruiste al FG incorrecto, o tuviste una mala configuración por un corto período de tiempo. Esta irregularidad no es motivo de preocupación , pero, por supuesto, puede limpiarla.
  2. Puede deshacerse de una de las particiones vacías fusionando una de ellas en la otra. Hay excelentes guías en la web sobre cómo hacer esto. Esto es fácil de hacer e instantáneo en este caso. También puede mover particiones a un FG deseado reconstruyéndolos. Reconstruir particiones vacías es instantáneo.

Cuando haya terminado de limpiar y encuentre FG vacíos, también puede soltarlos.

usr
fuente