Estamos tentando particionar as tabelas do SQL Server por ano (2015, 2016, 2017, 2018) e queremos criar mais uma partição que mantenha os dados atuais do período de 35 dias sempre.
Partições: Part_2015, Part_2016, Part_2017, Part_2018, Part_35Day
Create Partition Function RangePartFunction (datetime2)
as Range Right For Values ('20150101', '20160101', '20170101')
Estou lutando como criamos para 2018 e período de 35 dias consecutivos
Alguém pode aconselhar...
No momento, o SQL Server não tem uma maneira de especificar declarativamente uma janela de partição deslizante. É necessário executar o T-SQL para remover o limite antigo e criar um novo. Um script T-SQL (talvez encapsulado em um procedimento armazenado) pode ser agendado diariamente para essa finalidade.
Geralmente, é melhor dividir e mesclar apenas partições vazias, mas isso não é possível no seu caso devido ao histórico de partições anuais, além da partição de janela de 35 dias na mesma tabela. Um método para fazer isso com relativa eficiência é empregar um esquema de partição, função e tabela de preparo idênticos.
SPLIT
Isso permite que você opere na partição de janela de 35 dias sem movimentação excessiva de dados e registro que seriam necessários comMERGE
partições não vazias.O script abaixo desliza a janela diária e move os dados para fora da janela ativa usando
DELETE...OUTPUT
(100 mil linhas diárias). O trabalho pesado para os dados dentro da janela ativa (cerca de 3,5 milhões de linhas) é feito comCREATE INDEX...WITH(DROP_EXISTING=ON)
. Eu esperaria que isso funcionasse bem dentro de sua janela de manutenção de 3 horas, provavelmente segundos ou minutos na pior das hipóteses.Isso pressupõe que sua tabela e índices estejam alinhados. Abaixo está o exemplo DDL.
Script de manutenção diária da partição (veja comentários embutidos):