Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

SQL Server : FREEPROCCACHE vs FLUSHPROCINDB

Voici 2 commandes DBCC très utiles lors de tests de requêtes par exemple. Ces 2 commandes ont pour effet de vider le cache de procédure de SQL Server.

Qu'est ce que le cache de procédure, c'est l'emplacement où SQL Server stocke le code Transact-SQL compilé. Toutes les requêtes sont compilées et donc le plan d'exécution obtenu après compilation est stocké dans ce cache.

Le plan d'exécution d'une requête peut donc être réutilisé et ne plus passer par l'étape de compilation. Dans le cas d'une procédure stockée, c'est systématique, si le plan est toujours dans le cache (si la procédure est utilisée fréquemment), dans le cas d'une requête simple (dite AdHoc) la réutilisation du plan est moins fréquente (elle dépend de la complexité de la requête, du mode de paramétrisation du serveur, etc.)

DBCC FREEPROCCACHE et DBCC FLUSHPROCINDB (non documenté) permettent de vider le cache de procédure, la première commande vide tout le cache de procédure du serveur, tandis que la seconde agit uniquement sur une base de données.

-- Vide tout le cache de procédure

DBCC FREEPROCCACHE

 

-- Vide le cache de procédure de la base de données active

DBCC FLUSHPROCINDB(0)

Petite particularité de la seconde, après quelques tests, c'est que le cache de procédure AdHoc (des requêtes non procédures stockées) est systématiquement vidé, quelque soit la base de données d'où vient cette requête. Du coup l'exécuter sur une base de données tel que model (Database Id de 3) videra uniquement le cache de procédure AdHoc du système :

-- Vide le cache de procédure AdHoc du système

DBCC FLUSHPROCINDB(3)

Ces 2 fonctions sont à éviter en production, car juste après leur exécution vous allez avoir une suite de compilations importantes (qui consomme pas mal de CPU). Par contre pour tester une procédure ou une requête c'est très utile, cela vous permet de générer un nouveau plan et avec SET STATISTICS IO ON d'avoir le temps processeur nécessaire à la compilation de la requête.

Merci à l'un de mes clients (qui se reconnaîtra) pour l'astuce et aussi à Paul Randal (Lead PM chez MS) pour avoir éclairci ma lanterne au sujet du FLUSHPROCINDB(0).

Bon code…

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Publié jeudi 7 décembre 2006 17:02 par christian
Classé sous :

Commentaires

Pas de commentaires
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01