Maison >base de données >tutoriel mysql >Pourquoi les lectures logiques sont-elles si élevées lors de l'utilisation de fonctions d'agrégation fenêtrées, en particulier avec les spools de sous-expressions courants ?

Pourquoi les lectures logiques sont-elles si élevées lors de l'utilisation de fonctions d'agrégation fenêtrées, en particulier avec les spools de sous-expressions courants ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-26 18:47:15894parcourir

Why are logical reads so high when using windowed aggregate functions, especially with common subexpression spools?

Pourquoi les lectures logiques pour les fonctions d'agrégation fenêtrées sont-elles si élevées ?

Les fonctions d'agrégation fenêtrées peuvent entraîner des lectures logiques élevées signalées dans les plans d'exécution avec des bobines de sous-expression, en particulier pour les grandes tables. Cet article vise à expliquer la raison de cette observation et à fournir des informations sur la compréhension du nombre de lectures logiques pour les tables de travail.

Explication

Les lectures logiques sont comptées différemment pour les tables de travail par rapport aux tables de travail conventionnelles. tables de bobines. Dans les tables de travail, chaque lecture de ligne se traduit par une « lecture logique ». Ceci est différent du rapport sur les pages hachées pour les « vraies » tables de bobine.

La raison pour laquelle le comptage des lectures est effectué de cette manière est qu'il fournit des informations plus significatives pour l'analyse. Le suivi des pages hachées pour les tables de travail est moins utile en raison de la nature interne de ces structures. Les lignes de rapport mises en file d'attente reflètent mieux l'utilisation réelle des ressources tempdb.

Dérivation de formule

La formule dérivée pour prédire les lectures logiques de la table de travail est :

Worktable logical reads = 1 + (NumberOfRows * 2) + (NumberOfGroups * 4)

Cette formule prend en compte le suivant :

  • 1 : Représente le chargement initial des données dans la table de travail.
  • NumberOfRows * 2 : Les deux spools secondaires ( créé pour réduire le coût de retour des lignes) sont entièrement lus deux fois.
  • NumberOfGroups * 4 : Le spool principal émet des lignes comme expliqué ci-dessous, ce qui entraîne le nombre de valeurs de groupe distinctes (plus 1).

Émission de rangée de bobine primaire

La bobine primaire, chargée d'accumuler lignes et effectue le calcul global, fonctionne comme suit :

  • Lit chaque ligne de l'entrée et l'écrit dans la table de travail.
  • Lorsqu'un nouveau groupe est rencontré, il émet une ligne à l'opérateur de boucles imbriquées, indiquant le début d'une nouvelle partition de groupe.
  • Les moyennes pour chaque groupe sont calculées à l'aide des lignes du table de travail.
  • Les moyennes sont jointes aux lignes de la table de travail.
  • La table de travail est tronquée pour préparer le groupe suivant.
  • Pour traiter le groupe final, la bobine émet une ligne factice.

Supplémentaire Considérations

Dans votre script de test, vous avez remarqué que la réplication du même processus entraînait moins de lectures logiques (11). Cet écart est attribué à l'optimisation des algorithmes utilisés par le processeur de requêtes dans différents environnements. La formule reste valable dans les cas généraux où des boucles imbriquées ou des jointures de hachage sont utilisées.

Conclusion

Comprendre les différences de comptage pour les lectures logiques dans les tables de travail est essentiel pour interpréter avec précision les plans d'exécution impliquant des fonctions d'agrégation fenêtrées. La formule fournie offre un moyen utile d'estimer les lectures logiques de la table de travail, facilitant ainsi l'analyse des performances et les efforts d'optimisation.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn