SQL Server 2012 a introduit la puissante fonctionnalité d’index ColumnStore, qui améliore considérablement les performances des scénarios de data warehousing et de business intelligence. Cependant, une limitation de SQL Server 2012 est qu’il n’autorise pas les mises à jour directes sur les tables avec un index ColumnStore. Cela peut être frustrant pour les utilisateurs qui ont besoin de mettre à jour leurs données sur un système activé par ColumnStore.
Lorsque vous essayez de mettre à jour des données dans une table avec un index ColumnStore, vous pouvez rencontrer le message d’erreur suivant : “Msg 35330, Niveau 15, État 1, Ligne 1 L’instruction INSERT a échoué car les données ne peuvent pas être mises à jour dans une table avec un index columnstore. Considérez la désactivation de l’index columnstore avant d’émettre l’instruction INSERT, puis la reconstruction de l’index columnstore après l’achèvement de l’INSERT.”
Le message d’erreur suggère une solution de contournement, qui consiste à désactiver l’index ColumnStore avant d’effectuer la mise à jour, puis à le reconstruire par la suite. Cependant, cette approche peut être longue et consommatrice de ressources.
Heureusement, il existe des solutions plus efficaces. Une solution recommandée consiste à utiliser la partition de table. Avec SQL Server 2012, la limite maximale de partitions par table a été augmentée à 15 000. Cela vous permet de configurer votre processus ETL (Extract, Transform, Load) pour mettre à jour les données dans une nouvelle partition sur une base quotidienne tout en conservant les données historiques pendant de nombreuses années.
Le processus ETL peut charger les données quotidiennes dans une table de mise en scène, créer un index ColumnStore sur la table de mise en scène, puis utiliser l’opération ALTER TABLE … SWITCH rapide pour “basculer” les nouvelles données. Cette approche élimine la nécessité de désactiver et de reconstruire l’index ColumnStore pour chaque mise à jour.
D’autres méthodes pour mettre à jour un index ColumnStore incluent :
- Désactiver ou supprimer l’index ColumnStore, mettre à jour les données, puis reconstruire l’index.
- Basculer une partition de la table avec l’index ColumnStore dans une table de mise en scène vide, désactiver l’index ColumnStore sur la table de mise en scène, effectuer les mises à jour, puis construire ou reconstruire l’index ColumnStore.
Ces méthodes ont été largement utilisées et documentées par les professionnels de SQL Server. Si vous utilisez SQL Server 2012 avec ColumnStore, nous aimerions connaître vos expériences. Utilisez-vous l’un des processus mentionnés ci-dessus, ou avez-vous d’autres techniques ? Veuillez partager vos réflexions et vos idées dans la section des commentaires ci-dessous.