J'ai une requête simple en cours d'exécution contre SQL Server 2005
SELECT *
FROM Table
WHERE Col = 'someval'
La première fois que j'exécute la requête peut prendre > 15 secs
. Les exécutions suivantes sont de retour < 1 sec
.
Comment puis-je faire en sorte que SQL Server 2005 n'utilise aucun résultat mis en cache? J'ai essayé de courir
DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE
Mais cela semble n'avoir aucun effet sur la vitesse de requête (encore < 1 sec
).
sql-server
caching
PaulB
la source
la source
Réponses:
Voici une bonne explication. Découvrez-le.
http://www.mssqltips.com/tip.asp?tip=1360
De l'article lié:
la source
Huit façons différentes de vider le cache du plan
1. Supprimez tous les éléments du cache de plan pour l'instance entière
Utilisez-le pour vider soigneusement le cache du plan. La libération du cache de plan entraîne par exemple la recompilation d'une procédure stockée au lieu de sa réutilisation à partir du cache. Cela peut entraîner une baisse soudaine et temporaire des performances des requêtes.
2. Videz le cache du plan pour l'instance entière et supprimez le message d'achèvement normal
"L'exécution de DBCC est terminée. Si DBCC a imprimé des messages d'erreur, contactez votre administrateur système."
3. Vider le cache de plan ad hoc et préparé pour l'instance entière
4. Vider le cache de plan ad hoc et préparé pour un pool de ressources
5. Vider l'intégralité du cache du plan pour un pool de ressources
6. Supprimez tous les éléments du cache de plan pour une base de données (ne fonctionne pas dans SQL Azure)
7. Vider le cache du plan pour la base de données actuelle
8. Supprimez un plan de requête du cache
Source 1 2 3
la source
Bien que la question soit un peu ancienne, cela pourrait encore aider. Je rencontre des problèmes similaires et l'utilisation de l'option ci-dessous m'a aidé. Je ne sais pas si c'est une solution permanente, mais c'est en train de la réparer pour le moment.
Ensuite, votre requête sera comme ça
la source
select * from Table where Col = 'someval' OPTION (OPTIMIZE FOR UNKNOWN)
La valeur que vous spécifiez pour la mémoire du serveur n'a pas d'importance, tant qu'elle diffère de la valeur actuelle.
Btw, la chose qui provoque l'accélération n'est pas le cache de requêtes, mais le cache de données.
la source
Notez que ni
DBCC DROPCLEANBUFFERS;
niDBCC FREEPROCCACHE;
n'est pris en charge dans SQL Azure / SQL Data Warehouse.Cependant, si vous devez réinitialiser le cache du plan dans SQL Azure, vous pouvez modifier l'une des tables de la requête (par exemple, ajoutez simplement puis supprimez une colonne), cela aura pour effet secondaire de supprimer le plan du cache .
Personnellement, je fais cela pour tester les performances des requêtes sans avoir à gérer les plans mis en cache.
Plus de détails sur le cache de procédures SQL Azure ici
la source