Mise à jour d'une grande dimension répliquée (PDW SQL Server)


8

Nous utilisons une appliance SQL Server PDW pour notre entrepôt de données. L'une des tables de notre entrepôt est une table répliquée avec environ 20 millions de lignes. Dans le cadre de notre processus ETL, nous devons expirer les anciens enregistrements de cette dimension; cependant, nous constatons que la mise à jour d'une poignée d'enregistrements (<100) prend plus d'une heure. C'est ce que j'aimerais améliorer si je le peux.

Naturellement, une option à laquelle j'ai pensé était de changer cette dimension de répliquée en distribuée. Mes tests montrent que cela résoudrait le problème avec le processus ETL prenant beaucoup de temps (de 1,5 heure à 30 secondes), mais toutes les jointures contre la version distribuée de cette dimension seraient affectées car les jointures ne sont presque jamais basées sur la même distribution colonne. Lorsque je regarde le plan d'exécution de certaines de ces requêtes, je vois généralement une opération ShuffleMove ou BroadcastMove .

Donc ma question au gourou PDW est la suivante:

Y a-t-il autre chose à faire pour améliorer les performances de mise à jour des enregistrements dans la version répliquée de cette dimension?

Encore une fois, le passage à une table distribuée ne semble pas être la meilleure solution car il affectera des centaines de requêtes SQL et de rapports déjà écrits développés par d'autres personnes.


1
Je n'ai pas vu beaucoup de questions PDW ici, si vous n'obtenez pas de réponse, essayez également les forums MSDN SQL Server. Il y a aussi des réponses rapides. Bonne chance.
Ali Razeghi

Réponses:


5

Quelques questions. 20 millions de lignes ne sont pas nécessairement si grandes.

Quel processus utilisez-vous actuellement pour effectuer vos mises à jour et suppressions?

La dimension est-elle un INDEX DE COLONNE DE CLUSTERE, UN INDEX DE CLUSTERED ou un HEAP?

Êtes-vous en train de dire qu'il y a du mouvement pendant que vous mettez à jour et supprimez cette table ou avez-vous simplement vu le mouvement lorsque vous avez changé la table de répliquée en distribuée?

Si c'est ce dernier qui n'est pas surprenant. Il est peu probable que vous soyez compatible avec la jointure et l'agrégation. Si vous faites quelque chose pour déclencher le mouvement lors de votre mise à jour / suppression, nous pourrions y réfléchir - bien qu'un exemple concret serait utile.

En termes généraux, je commencerais par essayer de garder l'ETL simple.

Utilisez CTAS par rapport à la dimension en sélectionnant uniquement les lignes que vous souhaitez conserver, réunissez-les dans toutes les nouvelles lignes et utilisez CASE pour détecter les modifications (conversion de la MISE À JOUR en une transformation dans le CTAS). Une fois terminé, vous pouvez ensuite utiliser une paire de commandes RENAME OBJECT pour passer de la table actuelle à la nouvelle table. Cela vous donne l'avantage supplémentaire d'avoir une vue historique de votre table - que vous pouvez déposer à votre guise.


1

La réplication ne vous empêche pas d'utiliser le partitionnement. Séparez votre table.

Ensuite, pour les lignes que vous devez supprimer ou mettre à jour, CTAS la partition entière dans une nouvelle table, en utilisant LEFT JOIN et COALESCE pour obtenir les valeurs appropriées (c.-à-d. Nouvelles) pour les mises à jour des lignes modifiées tout en conservant les lignes souhaitées et en excluant le ceux que vous n'avez pas.

Enfin, partitionnez la nouvelle table avec votre ancienne partition.

Et.. Voila :)

D'après mon expérience, PDW n'aime pas les mises à jour et les suppressions. Les commutateurs CTAS et de partition fonctionnent bien.


1

Les instructions UPDATE dans PDW ne sont que partiellement parallèles plutôt que totalement parallèles comme CTAS.

Cela dit, cela pourrait bien être dû à l'indexation. Quel est le code réel que vous exécutez? Avez-vous des index en place pour vous aider à trouver les enregistrements que vous expirez? Vous devez toujours appliquer certaines des techniques de réglage standard de l'application d'index non clusterisés aux tables de magasin de lignes. Le fait que PDW ne prend pas en charge les clés primaires semble souvent signifier que les gens oublient d'indexer leur clé naturelle, alors ne vous trouvez pas dans ce bateau ...

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.