Question

J'ai une base de données contenant des tables avec plus de 600 millions de disques et un ensemble de procédures stockées qui rendent les opérations de recherche complexes sur la base de données. Les performances des procédures stockées est si lent même avec des indices appropriés sur les tables. La conception de la base de données est une conception db relationnelle normale. Je souhaite modifier la conception de base de données pour être multidimensionnelle et utiliser les requêtes MDX au lieu des requêtes T-SQL traditionnelles, mais la question est la suivante: est la requête MDX mieux que la requête T-SQL traditionnelle à l'égard de la performance? et si oui, dans quelle mesure qui améliorent les performances des requêtes?

Merci pour toute aide.

Était-ce utile?

La solution

Les pommes et les oranges: Un service d'analyse cube OLAP est un type de stockage fondamentalement différent d'une base de données SQL Server, et ils sont conçus pour faire des choses différentes. Techniquement MDX n'est pas « plus rapide » que T-SQL, ou vice versa - ils ne sont que des langues, mais conçus pour des besoins différents.

Cela dit, un cube est généralement ce qui fonctionne le mieux pour faire numérique analyse des données statiques, telles que l'agrégation grand nombre de ventes / / whatever enregistre au fil du temps. En revanche, une base de données relationnelle traditionnelle fonctionne généralement très bien, si le schéma et les index sont bien construits, pour la recherche. Une façon simple de juger: si vos requêtes SQL doivent faire beaucoup de

select grock, sum/min/max/avg( foo ) 
from bar 
group by grock -- Ideal Analysis Services problem

puis un cube peut aider (il est conçu pour les fonctions mathématiques globales - somme () et le groupe par). OTOH si vos requêtes font beaucoup de

select cols 
from foo 
where <complicated search> -- Not so much

alors un cube ne sera probablement pas aider, et je concentrer plutôt sur le réglage du schéma, les requêtes et l'indexation, et peut-être le partitionnement table si les données peuvent être convenablement partitionnées.

Avez-vous un index ordonné en clusters et couvrant les index non-cluster qui correspondent aux requêtes?

Autres conseils

cube MS OLAP SSAS peut être utilisé dans plusieurs modes de stockage:

  1. Relationnel (OLAP) - les données et les métadonnées reste dans votre DB et quelques autres vues matérialisées sont ajoutées. Ou non être plus rapide.

  2. Hybride (HOLAP) - métadonnées et agrégations (pré-calculées) sont stockés sur un nouveau serveur exécutant une instance SSAS. Cela devrait accélérer toutes les requêtes à l'aide agrégations, comme « nombre total d'heures des employés pour l'année dernière par mois », mais les requêtes qui l'accès au détail à des enregistrements spécifiques peut être comme avant.

  3. OLAP multidimensionnel (MOLAP) où toutes vos données ainsi que les métadonnées et les agrégations sont copiés sur le serveur SSAS. Cela est généralement le plus rapide, mais le stockage des doublons.

Avant de commencer, vous devriez considérer vous optimiser la mise en page table pour les rapports et l'analyse, en d'autres termes utilisent un entrepôt de données (DW) - mettre vos données dans une dimension étoile Kimball et tables de faits. Ensuite, vous chargez le DW en utilisant ETL (SSIS) périodiquement et pointez votre reporting et d'analyse à la DW. Il se peut que vous n'avez pas besoin d'utiliser SSAS du tout - des requêtes SQL en cours d'exécution contre une mise en page de table étoiles sont généralement beaucoup plus rapide que contre une base de données DB --operational normalisée. Si cela est encore trop lent, créer des cubes SSAS au-dessus de la DW. Une fois que vous commencez à charger votre DW, vous pourrez peut-être supprimer les enregistrements constituent la base de données opérationnelle, ce qui rend plus rapide pour tous les jours d'utilisation.

Pour résumer, ma règle générale serait la suivante:
1. Construire un DW et de définir votre processus ETL
2. Essayez les rapports T-SQL contre le DW, il peut être assez bon.
3. Si encore lent, créer des cubes SSAS (au-dessus du DW) en mode HOLAP et utiliser MDX pour les interroger.

« La performance des procédures stockées est si lent même avec des indices appropriés »

Je serais surpris si la procédure stockée est le vrai problème, peut-être la façon dont les procédures le sont utilisées est lent, mais une procédure par définition stockée ne permet pas lent. Avez-vous trouvé ce que vos procédures est lent? Avez-vous les profilés? Je prendrais un regard profond longtemps à cette route avant redessiner ma base de données. bases de données multidimensionnelles OLAP sont pour votre base de données est strictement une base de données OLAP ou est un hybride de OLAP et OLTP? Peut-être que vous avez besoin de dé-normalisé et répliquer les données dans la conception de votre OLTP dans le Dénormaliser structure d? 600 millions de disques dans une table ne sont pas par tous les moyens énormes, ce n'est pas petit mais cela ne me conduit pas à croire que l'abandon des procédures stockées fera par magie les choses rapidement. Profil vos procs stockées et voir où les goulots d'étranglement sont avant de sauter dans un plus grand projet pour résoudre le problème.

Avez-vous envisagé PowerPivot (le module complémentaire Excel)? Il utilise la compression verticale pour compresser les données d'environ 95%, au niveau local, afin que vous puissiez analyser au contenu de votre coeur.

http://technet.microsoft.com/en-us/library /ee210692.aspx

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top