Je suis une requête executiong, qui produit un plan:
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, il est OK si si Profiler rapporte des nombres supérieurs à Statistics IO. Mais Profiler affiche les 92283
lectures à 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 constaté que:
- 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? Est-il inclus dans les statistiques IO juste parce qu'il pourrait être nécessaire (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 des lectures physiques, il n'y a pas assez de mémoire alloué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 uniquement des lectures logiques, de la RAM est utilisée?
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é?