J'ai entendu cela de mes amis, mais je n'ai jamais cherché à savoir si c'était vrai.
Est-il vrai que les résultats des données d'une requête exécutée sont stockés dans le cache?
Je veux dire, si j'ai une procédure stockée comme:
SELECT * FROM USERLIST
... est-il vrai que le résultat (liste des utilisateurs, dans ce cas) est stocké dans le cache.
Aussi, si je les ai:
SELECT * FROM USERLIST WHERE user="user"
SELECT * FROM USERLIST WHERE user="userzzz"
(dans lequel user / userzzz sont passés en tant que paramètres), est-il correct qu'il stocke 2 résultats différents dans le cache de la base de données.
Je ne pense pas, mais je veux la confirmation de vous, experts!
Réponses:
Les résultats des requêtes ne sont pas mis en cache
Cependant, la table source et les données d'index et les métadonnées seront mises en cache après la première utilisation (sous réserve d'une utilisation continue, de la charge et de la pression de la mémoire)
Autrement dit, les résultats d'une requête seront évalués à chaque exécution, mais les tables (et tous les index, etc.) utilisés par la requête seront probablement déjà en mémoire.
Le plan d'exécution compilé sera mis en cache, d'où la confusion vient, je pense
la source
Lorsqu'une procédure stockée est exécutée, elle est optimisée et compilée et le plan de requête est placé dans le cache de procédure.
Les procédures restent en cache pour les autres utilisateurs, tant qu'il y a de l'espace. Les procédures sont supprimées à l'aide de l'algorithme le moins récemment utilisé (LRU).
Alors que l'exécution initiale d'une procédure stockée nécessite une récupération à partir de procédures système sur disque, il est possible, pour les exécutions suivantes, de récupérer simplement le plan optimisé à partir du cache de procédure. Ce comportement peut entraîner un gain de performances significatif.
Ainsi, ce qui est dans le cache est le plan optimisé de la procédure stockée et non les résultats de la procédure stockée.
la source
Lorsqu'une requête est prête à être traitée par SQL Server, SQL Manager la recherche dans
cache
; et s'il n'est pas là, il doit être compilé. Le processus de compilation comprend quelques éléments.Lorsqu'une procédure stockée est exécutée, elle est optimisée et compilée. selon cela, un plan de requête est placé dans le cache de procédure.
Consultez la
Compilation and Execution
section sur les composants internes et l'architecture du processeur de requêtes Microsoft SQL Server pour obtenir des informations détaillées sur le traitement des requêtes, etc.Vérifiez le diagramme suivant (à partir de MSDN) pour l'exécution de la procédure stockée pour clarifier votre question:
la source
SQL Server passe essentiellement par ces étapes pour exécuter n'importe quelle requête (appel de procédure stockée ou instruction SQL ad hoc):
1) vérifier syntaxiquement la requête
2) si ça va - il vérifie le cache du plan pour voir s'il a déjà un plan d'exécution pour cette requête
3) s'il y a un plan d'exécution - ce plan est (ré) utilisé et la requête exécutée
4) s'il n'y a pas encore de plan, un plan d'exécution est déterminé
5) ce plan est stocké dans le cache de plan pour une réutilisation ultérieure
6) la requête est exécutée
(copie de la réponse de Marc_s)
la source
Comme d'autres l'ont indiqué, les résultats des requêtes dans SQL Server ne sont pas mis en cache.
Si vous souhaitez mettre en cache les résultats d'une requête (ou d'un SP), il existe des solutions de contournement. Par exemple, consultez cet article sur le site Web de Brent Ozar .
la source