Разделение SQL Server 2008 R2 - одна и та же файловая группа, 1 файл, 2 номера_раздела - HELP


10

Это мой первый опыт работы с разделами в SQL Server. Я узнал об этом из руководства Брента Озара.

Несколько раз я сталкивался со странным сценарием; когда я бегу:

SELECT *
FROM ph.FileGroupDetail
ORDER BY partition_number
Go

Существует одна и та же файловая группа, показывающая два раза с двумя разными номерами partition_numbers: 1 правильно в конце со значением диапазона, другой в начале со значением null range_value.

нажмите здесь, чтобы увеличить изображение

введите описание изображения здесь

Пара вопросов:

  1. Как это происходит, где я ошибся?

  2. Как мне решить проблему, это означает, как избавиться от той, что в начале, так как у меня уже есть пустой раздел в начале.

Я попытался удалить файл (работал, когда он был пуст) и файловую группу, но файловая группа сказала, что это не может быть удалено.

Может кто-нибудь объяснить, пожалуйста, как это произошло и как избавиться от записи раздела 2?


3
Стив, вы можете опубликовать схему и функцию вашего раздела?
PseudoToad

@steve - действительно было бы полезно опубликовать схему и функцию разделов в соответствии с просьбой Gizmo.
Thronk

1
Можете ли вы выставить также partition_id из sys.partitions?
user_0

Ответы:


3

Результаты показывают, что в какой-то момент к функции была добавлена ​​явная граница раздела NULL, когда NEXT USEDфайловая группа схемы разделения была установлена ​​на DailyAlbertFG30. Кроме того, я не вижу использования DailyAlbertFG2. Возможно, когда-то в этой файловой группе был раздел, который впоследствии был объединен.

Ниже приведен скрипт, который показывает, как можно создать раздел FG30 с границей NULL. Граница NULL могла быть добавлена ​​случайно.

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. Я не знаю. Это не необычный случай как таковой. Вы можете свободно назначать разделы для файловых групп. Это не должно быть 1: 1. Возможно, вы случайно перестроились на неправильную FG или у вас была плохая конфигурация в течение короткого периода времени. Об этой неровности не стоит беспокоиться , но вы, конечно, можете ее устранить.
  2. Вы можете избавиться от одного из пустых разделов путем слияния одного из них в другой. В Интернете есть отличные руководства о том, как это сделать. Это легко сделать и мгновенно в этом случае. Вы также можете переместить разделы в нужную FG, перестроив их. Восстановление пустых разделов происходит мгновенно.

Когда вы закончите уборку и найдете пустые ФГ, вы также можете их бросить.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.