302
Chapitre 9. Optimisation des procédures stockées
9.3 CACHE DES REQUÊTES AD HOC
Le cache contient en réalité bien plus que les plans d’exécution des procédures stockées. Il existe trois parties principales du cache (cache stores) qui nous intéressent ici
et qui stockent des résultats de compilation :
• Object Plans (CACHESTORE_OBJCP) : plans de procédures stockées, déclencheurs et fonctions.
• SQL Plans (CACHESTORE_SQLCP) : plans de batches.
• Bound Trees (CACHESTORE_PHDR) : arbres d’analyse d’une requête.
Elles comportent chacune une table de hachage qui permet de gérer les entrées
du cache (une hash table composée de hash buckets). Vous pouvez obtenir des informations
sur
les
caches
par
la
vue
de
gestion
dynamique
sys.dm_os_memory_cache_counters, et examiner les tables de hachage par la vue
sys.dm_os_memory_cache_hash_tables et enfin les hash buckets par
sys.dm_os_memory_cache_entries. Il y a également plusieurs types d’objets dans le
cache, les deux qui nous intéressent ici sont les plans compilés (Compiled Plans, CP)
et les plans d’exécution (Execution Plans, MXC). La requête suivante vous donne la
taille de ces caches :
SELECT
Name,
Type,
single_pages_kb,
single_pages_kb / 1024 AS Single_Pages_MB,
entries_count
FROM sys.dm_os_memory_cache_counters
WHERE type in ('CACHESTORE_SQLCP', 'CACHESTORE_OBJCP',
'CACHESTORE_PHDR')
ORDER BY single_pages_kb DESC
Les plans compilés représentent la compilation d’une procédure ou d’un batch de
requêtes (c’est-à-dire d’ordres SQL envoyés en un seul lot depuis le client). S’il s’agit
d’une procédure (procédure stockée, fonction, déclencheur), il est stocké dans
CACHESTORE_OBJCP, s’il s’agit d’un batch, il ira dans CACHESTORE_SQLCP.
Les plans d’exécution sont en quelque sorte des instances des plans compilés, ils
sont générés rapidement, à l’exécution, à partir d’un plan compilé. Il y a un plan
d’exécution par utilisateur lançant la procédure ou le batch. Vous pouvez inspecter
10 Les options de curseur ont changé
11 La recompilation a été demandée par l’option de requête RECOMPILE
EventSubClass
Signification
➤
Chapitre 9. Optimisation des procédures stockées
9.3 CACHE DES REQUÊTES AD HOC
Le cache contient en réalité bien plus que les plans d’exécution des procédures stockées. Il existe trois parties principales du cache (cache stores) qui nous intéressent ici
et qui stockent des résultats de compilation :
• Object Plans (CACHESTORE_OBJCP) : plans de procédures stockées, déclencheurs et fonctions.
• SQL Plans (CACHESTORE_SQLCP) : plans de batches.
• Bound Trees (CACHESTORE_PHDR) : arbres d’analyse d’une requête.
Elles comportent chacune une table de hachage qui permet de gérer les entrées
du cache (une hash table composée de hash buckets). Vous pouvez obtenir des informations
sur
les
caches
par
la
vue
de
gestion
dynamique
sys.dm_os_memory_cache_counters, et examiner les tables de hachage par la vue
sys.dm_os_memory_cache_hash_tables et enfin les hash buckets par
sys.dm_os_memory_cache_entries. Il y a également plusieurs types d’objets dans le
cache, les deux qui nous intéressent ici sont les plans compilés (Compiled Plans, CP)
et les plans d’exécution (Execution Plans, MXC). La requête suivante vous donne la
taille de ces caches :
SELECT
Name,
Type,
single_pages_kb,
single_pages_kb / 1024 AS Single_Pages_MB,
entries_count
FROM sys.dm_os_memory_cache_counters
WHERE type in ('CACHESTORE_SQLCP', 'CACHESTORE_OBJCP',
'CACHESTORE_PHDR')
ORDER BY single_pages_kb DESC
Les plans compilés représentent la compilation d’une procédure ou d’un batch de
requêtes (c’est-à-dire d’ordres SQL envoyés en un seul lot depuis le client). S’il s’agit
d’une procédure (procédure stockée, fonction, déclencheur), il est stocké dans
CACHESTORE_OBJCP, s’il s’agit d’un batch, il ira dans CACHESTORE_SQLCP.
Les plans d’exécution sont en quelque sorte des instances des plans compilés, ils
sont générés rapidement, à l’exécution, à partir d’un plan compilé. Il y a un plan
d’exécution par utilisateur lançant la procédure ou le batch. Vous pouvez inspecter
10 Les options de curseur ont changé
11 La recompilation a été demandée par l’option de requête RECOMPILE
EventSubClass
Signification
➤
