Estou estudando partições de mesa e ainda tenho algumas coisas que não tenho certeza.
Criei uma função de partição que organiza os dados dos últimos três meses.
CREATE PARTITION FUNCTION PartitioningBy3meses (datetime)
AS RANGE LEFT FOR VALUES (getdate()-90, getdate()-1);
GO
Esquema:
CREATE PARTITION SCHEME PartitionByVejes
AS PARTITION PartitioningBy3meses
TO (datosmuyviejos, datosviejos, [PRIMARY]);
GO
Eu usei o assistente para particionar uma tabela existente e este é o código gerado para mim:
BEGIN TRANSACTION
ALTER TABLE [dbo].[factura] DROP CONSTRAINT [PK__factura__3213E83F22FEA7FF] WITH ( ONLINE = OFF )
ALTER TABLE [dbo].[factura] ADD PRIMARY KEY NONCLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
CREATE CLUSTERED INDEX [ClusteredIndex_on_PartitionByVejes_637678578300644842] ON [dbo].[factura]
(
[fecha]
)WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PartitionByVejes]([fecha])
DROP INDEX [ClusteredIndex_on_PartitionByVejes_637678578300644842] ON [dbo].[factura]
COMMIT TRANSACTION
GO
Dúvidas:
- O índice primário se tornou não clusterizado para distribuir os dados entre as partições?
- Por que o índice ClusteredIndex_on_PartitionByVejes_637678578300644842 foi criado e excluído?
- Os dados se movem sozinhos entre as partições com o passar do tempo ou tenho que fazer algo para fazê-los se mover?
Não. Um requisito para particionamento de tabela é que a chave de índice clusterizado exclusiva deve incluir explicitamente a coluna de particionamento . Como
fecha
não faz parte da chave primária existente, o assistente preservou a chave primária existente recriando a restrição de chave primária com um índice não clusterizado e, em seguida, criando um índice clusterizado temporário para particionar os dados. O resultado final é um heap particionado e um índice de chave primária não particionada não clusterizada. Isso pode não ser o que você pretendia, mas o assistente não fará alterações no esquema (por exemplo, adicionarfecha
à sua chave primária). Você precisará fazer isso antes de usar o assistente ou usar o T-SQL diretamente em vez de usar o assistente.Não, a manutenção da partição de janela deslizante não é automática. Você precisará agendar um script T-SQL que execute a manutenção conforme desejado. O SSMS inclui um assistente para Gerenciar Partição, que está disponível com um clique com o botão direito do mouse na tabela assim que a tabela for particionada.
Observe que a tabela e os índices devem estar alinhados ao armazenamento para realizar a manutenção da janela deslizante com eficiência. Para a tabela em sua pergunta, isso implica
fecha
que deve fazer parte da chave primária. Como você é novo no particionamento de tabelas, recomendo que leia atentamente a documentação de particionamento para entender as restrições e as implicações de desempenho para certificar-se de que é apropriado para sua situação.