web-dev-qa-db-fra.com

SET STATISTICS IO- table de travail / fichier de travail

Je suis une requête executiong, qui produit un plan: enter image description here

Statistiques IO:

Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Workfile'. Scan count 128, logical reads 5952, physical reads 576, read-ahead reads 6080, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Table1'. Scan count 9, logical reads 90450, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

Alors, quelques questions

1. Pourquoi Statistics IO affiche des lectures plus élevées que Profiler? .

Quant à KB314648 c'est OK si si Profiler rapporte des nombres supérieurs à Statistics IO. Mais Profiler affiche 92283 lit à la requête décrite, même exécution. Est-ce à dire que Profiler ne compte pas les lectures de fichiers/tables de travail?

2. Quelle est la différence entre "Worktable" et "Workfile"

J'ai trouvé cela:

  • les fichiers de travail peuvent être utilisés pour stocker des résultats temporaires pour les jointures de hachage et les agrégats de hachage.
  • les tables de travail peuvent être utilisées pour stocker des résultats temporaires pour le spool de requête, les variables lob, les variables XML et les curseurs.

Y a-t-il une différence physique entre eux?

3. Pourquoi existe-t-il une "table de travail" dans ce cas particulier?

Pourquoi ai-je une table de travail s'il y a 0 lecture logique? Son inclus dans les statistiques IO juste parce qu'il pourrait en avoir besoin (en cas de mauvaises estimations)?

La description trouvée sur technet semble vague ..

4. Que signifie "lectures physiques" sur le fichier de travail?

Cela signifie-t-il qu'il n'y avait pas assez de mémoire allouée pour la requête, les données ont donc dû être écrites sur le disque pendant l'exécution de la requête (avertissement jaune sur Hash Match)? Puis-je supposer que chaque fois que je vois une table de travail/fichier de travail dans Statistics IO avec les lectures physiques, il n'y a pas assez de mémoire accordée pour la requête et certains résultats intermédiaires de la requête ont dû être écrits sur le disque tempdb? Et chaque fois que je vois seulement des lectures logiques, RAM est utilisé?

5. Un "fichier de travail" signifie exactement une table qui est utilisée dans un seul but?

S'il y a plus d'un fichier de travail/table de travail, je ne peux pas savoir à quelle opération il est utilisé?

24
Jānis

1. Pourquoi Statistics IO affiche des lectures plus élevées que Profiler?

Aucune idée, désolé. Il y a souvent des différences car ils mesurent des choses différentes comme mentionné dans l'article de la base de connaissances. Je n'ai connaissance d'aucune documentation supplémentaire à ce sujet. Vous pourrez peut-être déduire certaines choses grâce à des tests détaillés, mais il n'y a vraiment aucune garantie que ce que vous trouverez restera cohérent entre les versions et les versions. Le comportement prévu est suffisamment incohérent, avant de prendre en compte bogues possibles .

2. Quelle est la différence entre "Worktable" et "Workfile"

Les deux sont des objets internes; sinon, c'est à peu près ce que les noms suggèrent: une table de travail a une structure semblable à une table, un fichier de travail est semblable à un fichier. La structure détaillée n'est pas visible, bien que certaines fonctionnalités générales puissent être distinguées en inspectant leurs méthodes et en suivant leurs chemins d'exécution avec un débogueur.

3. Pourquoi existe-t-il une "table de travail" dans ce cas particulier?

Une table de travail est toujours nécessaire pour une opération de hachage (mode ligne). Il est utilisé en interne pour distribuer l'entrée dans des partitions de hachage (un terme surchargé, non lié au partitionnement de table) et pour garder une trace de l'état. Je n'ai jamais vu un rapport de table de travail de hachage autre que zéro dans la sortie des statistiques, mais je ne l'ai jamais vraiment examiné.

4. Que signifie "lectures physiques" sur le fichier de travail?

Les fichiers de travail font partie du mécanisme utilisé lorsqu'une partition de hachage se renverse. Bien que cela ne soit pas documenté, les lectures physiques et de lecture anticipée se produisent lorsque le moteur d'exécution récupère les partitions de hachage renversées à partir des fichiers de travail.

5. Un "fichier de travail" signifie exactement une table qui est utilisée dans un seul but?

Si je me souviens bien, il peut y avoir plusieurs cas. Je ne connais aucun moyen de lier une ligne STATISTICS IO Particulière à un objet ou un nœud de plan particulier. Il s'agit d'une limitation de longue date. Il peut y avoir un changement à cela dans SQL Server 2016, même si je n'ai pas testé pour voir s'il s'applique aux objets temporaires internes.

En fin de compte, il n'y a pas beaucoup utile à apprendre de la sortie de STATISTICS IO Pour les fichiers de travail et les tables de travail au-delà de ce que vous pouvez apprendre en regardant à d'autres informations dans un plan de post-exécution (ou via DMV, événements étendus, etc.). Je m'excuse pour la réponse incomplète, mais c'est le mieux que je puisse offrir du haut de ma tête.

17
Paul White 9