Fermer

février 26, 2023

SQL Tuning / Blogs / Perficient

SQL Tuning / Blogs / Perficient


Dans les projets D&A, la création de requêtes SQL efficaces est essentielle pour que les cycles d’extraction/chargement par lots se terminent plus rapidement afin de respecter les SLA souhaités. Les observations ci-dessous visent à suivre les approches pour garantir l’écriture de requêtes SQL conformes aux meilleures pratiques afin de faciliter l’amélioration des performances.

Approche de réglage

Vérifications préalables :

Avant de soumettre une requête SQL à des améliorations de performances, voici les étapes à suivre.,

  • Plongez dans la requête SQL actuelle.
    • Complexité du SQL (# de Tables/Joins/Functions)
    • Conception de la requête SQL (Sous-requête/Sous-requête corrélée/Joindre/Séquences de filtrage)
    • Si les meilleures pratiques ont été suivies (modularisées ?/les jointures contiennent des fonctions/dérivations ?)
  • Vérifier les métriques telles quelles du SQL
    • Durée de retour 1St record et les 100 premiers enregistrements
    • Extraire les métriques du plan d’explication
      • Coût (utilisation des ressources)
      • Cardinalité (nombre de lignes renvoyées par opération de tâche)
      • Méthode d’accès (Table complète/ROWID/Index unique/Index complet/Analyse de saut d’index)
      • Méthode de jointure (hachage/boucle imbriquée/tri-fusion/jointure externe)
      • Ordre de jointure (séquence de jointure de plusieurs tables)
      • Cloison
      • Traitement parallèle (Exec sur plusieurs nœuds)

Après s’être assuré que les prérequis ci-dessus sont pris en compte et que les éventuels goulots d’étranglement ont été identifiés, les pratiques de réglage peuvent être appliquées sur la requête SQL pour améliorer les performances.

Directives de réglage :

Les directives de base sont énumérées ci-dessous.,

  • Perspective de conception de requête
    • Extrayez uniquement les colonnes requises dans le code via SELECT (au lieu de SELECT *)
    • Utilisez les jointures internes bien avant les jointures externes
    • Filtres appliqués en amont avec Inner Joins plutôt qu’à la fin en utilisant la clause WHERE
    • Évitez autant que possible les sous-requêtes/sous-requêtes corrélées
    • Créer des tables TEMP
      • pour contenir la logique de sous-requête
      • pour modulariser la logique complexe avec les colonnes/dérivations associées
      • pour contenir la liste de référence des valeurs (utilisée comme jointure au lieu de la clause IN)
      • pour conserver les attributs de fonctions/calculs/dérivations pour une jointure ultérieure avec des tables
      • pour contenir Complex Query Logic et ensuite appliquer RANK()/ROW_NUMBER()
    • Créer des tables physiques (au lieu de TEMP) si volume élevé
    • Supprimer les tables TEMP ou Physical une fois le traitement intermédiaire terminé
    • Une requête complexe avec trop de jointures LEFT peut être divisée en plusieurs parties, puis JOINed
    • Évitez les doublons le plus tôt possible avant de soumettre les tables dérivées aux JOIN
    • Sur les bases de données MPP, n’utilisez pas DISTRIBUTION pour les petites tables
    • Sur les bases de données MPP, les jointures basées sur la colonne DISTRIBUTION fournissent des résultats plus rapides

  • Perspective des fonctions
    • Utilisez EXISTS au lieu de IN, si seule la présence doit être vérifiée
    • Au lieu de MINUS, utilisez LEFT JOIN avec la condition IS NULL
    • Si DISTINCT provoque une lenteur, essayez ROW_NUMBER() pour sélectionner 1 enregistrement parmi les multiples
    • Ne pas utiliser les fonctions sur les jointures
  • Point de vue DBA
    • Recueillir des STATISTIQUES
    • Créer des index (simples/multiples) (sur les jointures/prédicats fréquemment utilisés selon les besoins)
    • Créer des partitions (pour des analyses optimisées)
  • Perspective spatiale/informatique
    • Augmenter l’espace de stockage du serveur de base de données
    • Augmentez les capacités informatiques du serveur de base de données
    • Traitement multi-nœuds des requêtes

Conclusion

À un niveau élevé, voici les inférences.,

  • Cochez Expliquez le plan.
  • Soumettez la requête à une conception efficace.
  • Concentrez-vous sur DBA, l’espace, les capacités informatiques.
  • Suivez les meilleures pratiques.






Source link