web-dev-qa-db-fra.com

Le traitement du cube prend moins de temps ou échoue

J'ai un cube SSAS avec 35 dimensions et 10 mesures.

  • Certaines des dimensions sont assez grandes de taille.
  • Dans presque toutes les données de dimensions sont mises à jour et insérées.
  • Les mesures ont un volume élevé de données.

Lorsque je cours à partir de [~ # ~ # ~] SSMS [~ # ~] (Par clic droit sur la base de données SSAS) "Traitement complet" sur la base de données, il faut environ 1 heure 30 min.

Lorsque je traite un cube (processus complet) de SQL Agent Job via un script XMLA, il prend environ 1 heure 20 min.

Lorsque je traite des dimensions et des mesures (processus complets) séparément via SSMS, il prend 1 heure 50 min.

Mais lorsque je traite des dimensions et des mesures de la SSIS (tâche DML via XMLA), il prend plus de 5 heures. [La consommation de mémoire est allé à près de 100%]

Donc, mes questions sont:

  1. Le traitement des dimensions et mesure des SSI peuvent-ils coûter le coût?
  2. Quel type de traitement dois-je choisir pour le traitement rapide du cube? Je fais le processus complet.
  3. Lorsque je traite un cube à partir de deux premières options, la plupart du temps, le cube est échoué en disant "clé d'attribut non trouvée", mais cela fonctionne bien lorsque je traite les dimensions et mesurez séparément. Ne traite pas que le cube complet garantit un traitement correct de la dimension et des mesures?
7
Zerotoinfinity

Oh mon cher..

D'abord. Dans votre cas, je voudrais vous suggérer de choisir l'option "Par défaut". Si vous utilisez le processus complet toujours Vous déposez toutes les données et toutes les objets et recréez toutes vos affaires. Vous n'en avez pas besoin. Très souvent, l'option de proposition est d'utiliser ProcessData suivi de processIndex.

Je n'ai pas procédé au cube de l'intérieur du SSIS, mais probablement SSIS vérifie quelque chose et verrouille quelque chose sur la base de données. La meilleure option est d'utiliser XMLA. Si vous souhaitez traiter votre cube de l'intérieur de la SSI, vous pouvez écrire une tâche de script pour effectuer le traitement - vous pouvez trouver un script sur le net.

Vous devez également vérifier si vous avez des données propres. Vérifiez deux fois dans votre projet et dans vos données si vous avez toutes les clés et ainsi de suite. Si vous traitez une dimension séparément, les données ne comparent pas entre les mesures et les dimensions. Je suis sûr que vous avez des clés en fait des tables de récits qui n'ont aucune valeur correspondante dans votre dimension. Faites une commande avec cela. Si vous n'avez aucune valeur dans la dimension et que cela est correct (n'existe pas dans les tables source), vous pouvez ajouter à chaque dimension une valeur supplémentaire avec la clé IE "-1" et toutes les valeurs telles que "N/A" (non applicables) et Pointez les valeurs non fondées à cet enregistrement dans les dimensions.

Et à la fin. Si vous avez une grande base de données SSAS, réfléchissez à une partition.

C'est beaucoup à parler. Si vous avez des questions spécifiques, n'hésitez pas à demander.

1
sdrzymala

Lors du traitement de toutes les dimensions et faits en SSIS séparément, vous le faites dans plus d'une transaction. Traitement Le cube entière dans une transaction est plus rapide lorsque le serveur peut le gérer.

0
Stefan Wilms

Je suggère fortement de partitionner votre cube. Ensuite, le serveur peut paralliser le traitement de la table de fait, ce qui vous donnera probablement le plus gros gain de performance.

0
nojetlag