Les procédures stockées SQL Server mettent-elles en cache les résultats des données?


11

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!


vient de répondre maintenant pour vous par marc_s stackoverflow.com/questions/8559443/…

Réponses:


19

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


"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." : oui, aussi je n'utilise pas SP, je suppose ... c'est une optimisation de base de données, cela n'a pas d'importance avec Sp, non?

@markzzz: presque tout SQL est compilé en un plan d'exécution, qu'il s'agisse d'une mise à jour directe, d'une sélection ou d'une procédure stockée
gbn

6

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.


6

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 Executionsection 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.

Le produit final de la phase de compilation est un plan de requête, qui est placé dans le cache de procédure. Le résultat / l'opération de la requête SQL peut avoir une taille en Mo, Go, donc elle n'est pas placée dans le cache de procédure ou le plan de requête.

Vérifiez le diagramme suivant (à partir de MSDN) pour l'exécution de la procédure stockée pour clarifier votre question: entrez la description de l'image ici


-1

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)


-1

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 .

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.