Réglage des performances des requêtes de base de données relationnelle

De nombreux clients rencontrent des problèmes de performances avec les applications d'entrepôt de données. Voici quelques directives de haut niveau sur la façon dont vous pouvez analyser et améliorer les performances d'un rapport dans Oracle Analytics. Dans certains cas, les requêtes SQL générées par Oracle Analytics sont complexes à analyser. Cette rubrique explique comment analyser et minimiser les problèmes de performances potentiellement issus des requêtes SQL générées par Oracle Analytics.

Cette rubrique n'aborde pas les problèmes de performances dus à des problèmes de réseau, de navigateur ou de présentation de rapport.

Analyse du journal des requêtes pour Oracle Analytics (niveau de journalisation 3 requis)

Pour découvrir comment trouver ce journal et comprendre son contenu, reportez-vous à Collecte et analyse des journaux des requêtes.

  1. Comparez le temps passé par la requête dans Oracle Analytics avec le temps passé dans la base de données. Autrement dit, comparez le temps de réponse avec la durée de la requête physique. En principe, le temps passé dans Oracle Analytics ne dépasse pas quelques secondes.
  2. Si le temps de réponse est supérieur à quelques secondes, analysez les étapes individuelles réalisées dans Oracle Analytics pour déterminer la cause (niveau de journalisation 5 requis).

Analyse de la requête SQL physique

  1. Vérifiez si toutes les tables incluses dans la requête sont nécessaires. Recherchez s'il existe des tables jointes mais pas incluses dans la clause SELECT, et sans filtre appliqué (de véritables filtres, et non des conditions de jointure).
  2. Identifiez le nombre de requêtes et sous-requêtes physiques générées. Plus précisément, identifiez le nombre de lectures d'une table de faits par la requête. Dans un monde parfait, la requête ne lit qu'une table de faits, et une seule fois. En présence de plusieurs tables de faits, déterminez pourquoi et vérifiez si vous pouvez en enlever.
  3. Recherchez les colonnes exclues, les règles d'agrégation non additives (REPORT_AGGREGATE, count(distinct)...), les étapes de sélection, les sous-requêtes dans le rapport, les opérateurs ensemblistes (UNION), les totaux, les sous-totaux, les vues multiples, etc.
  4. Recherchez les jointures externes. Déterminez leur origine, et si vous pouvez en enlever en modifiant la conception.

Analyse du plan d'exécution

Si l'optimisation de la requête SQL est insuffisante, analysez le plan d'exécution pour déterminer la cause première de votre problème de performances. Demandez à l'administrateur de base de données de vous aider. Il existe quatre moyens principaux d'améliorer les performances à ce stade :
  1. Réduisez le volume des E/S en améliorant les chemins d'accès aux données (index).
  2. Réduisez le volume des E/S en diminuant le volume des lectures de données. Par exemple, vous pouvez examiner les filtres appliqués ou la structure du modèle de données (reportez-vous à la section suivante).
  3. Augmentez le parallélisme (nombre de threads utilisés pour la lecture des tables de grande taille).
  4. Accélérez les E/S (améliorations d'infrastructure, base de données en mémoire, etc.).

Examen et amélioration du modèle de données pour diminuer le volume des lectures de données

  1. Créez des tables d'agrégation.
  2. Utilisez la fragmentation.

    Par exemple, si les utilisateurs sélectionnent principalement des données de l'année, du trimestre ou du mois en cours, vous pouvez fractionner le fait en deux tables : table en cours et table d'archivage. Sur la base de données Oracle, vous pouvez également utiliser le partitionnement.

  3. Utilisez la dénormalisation (pour réduire le nombre de jointures).
  4. Fractionnez les tables pour réduire le nombre de colonnes.

    Le volume des lectures de données ne dépend pas simplement du nombre de lignes de chaque table. Le volume d'une table dépend également de son nombre de colonnes et de leur taille. Par exemple, vous pouvez fractionner une table de grande taille qui compte 500 colonnes en deux tables : l'une avec les 50 colonnes les plus fréquemment utilisées et l'autre avec les 450 colonnes rarement utilisées restantes.

De nombreux problèmes de performances dans Oracle Analytics sont dus à une mauvaise conception, qui entraîne la génération de requêtes SQL non optimales. En modifiant la conception, vous pouvez améliorer les requêtes SQL générées par Oracle Analytics. L'incidence peut être immense, non seulement sur les performances des rapports mais également sur la quantité de ressources utilisées dans la base de données.