Eu tenho a seguinte configuração de partição em uma tabela.
Estou querendo criar uma nova partição que começa em 2019-01-01.
É a maneira correta de fazer isso e pode ser executado agora para que esteja pronto para 2019?
ALTER DATABASE mydatabase ADD FILEGROUP [Year7FileGroup]
GO
ALTER DATABASE mydatabase
ADD FILE
(NAME = N'data_year7',
FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL12.SQL2014\MSSQL\DATA\data_year73.ndf',
SIZE = 5000MB,
FILEGROWTH = 500MB)
TO FILEGROUP [Year7FileGroup]
GO
ALTER PARTITION SCHEME psYearlyPartition_Log
NEXT USED Year7FileGroup;
ALTER PARTITION FUNCTION pfYearlyPartition_Log()
SPLIT RANGE('20190101');
Em primeiro lugar, gostaria de incentivá-lo a ler o excelente post de Dan Guzman em Table Partitioning Best Practices . Ele faz um ótimo trabalho ao explicar o porquê:
Agora, vamos à sua pergunta.
Estou um pouco confuso por que você está adicionando uma nova partição para '2019-01-01', quando sua partição mais recente parece ser para '2016-01-01'. Como você está tentando adicionar uma nova partição para '2019-01-01', eu já esperava ver partições para '2017-01-01' e '2018-01-01'.
De qualquer forma, quando você planeja usar o
SPLIT
comando, a principal coisa a ser considerada é minimizar a movimentação de dados entre as partições existentes. A pré-definição de partições vazias 'antes' do valor mínimo que você pode ter e 'depois' do valor máximo que você pode ter permitirá que você minimize a movimentação de dados ao usar oSPLIT
. Fazendo referência ao post de Dan:As ações executadas por um SPLIT de uma função de partição RANGE LEFT:
As ações executadas por um SPLIT de uma função de partição RANGE RIGHT:
Parece que você pode estar usando
RANGE RIGHT
partição. Desde que você não tenha datas maiores ou iguais a '2019-01-01', não deve haver movimentação de dados eSPLIT
deve ser executado muito rapidamente. Você definitivamente deseja definir a partição '2019-01-01' antes de obter muitos dados em sua tabela com datas maiores ou iguais a essa data.O ponto principal que estou tentando enfatizar é garantir que você já tenha os limites de partição definidos bem à frente dos dados que existem atualmente na tabela. Muitas vezes, você pode ir em frente e definir intervalos de partições com anos de antecedência dos dados, mas você deve sempre monitorar suas tabelas particionadas para garantir que você não esteja se aproximando de um limite final.
Antes de particionar a tabela, pense em alguns pontos: 1. A coluna de partição é usada na cláusula where. 2. Tamanho da tabela 3. Chave de partição boa para ter valor inteiro ou carimbo de data/hora. 4. Se for para partição de intervalo de datas, nunca use max. Sempre crie alguma partição com antecedência para o intervalo futuro.