Sfratto del piano di misurazione


9

Abbiamo un SQL Server 2016 SP1 con memoria massima impostata su 24 GB.
Questo server ha un numero elevato di compilazioni, solo il 10% di queste compilazioni proviene da query ad hoc. Pertanto, i piani appena compilati devono essere archiviati nella cache del piano ma le dimensioni della cache del piano non aumentano (circa 3,72 GB).

Ho il sospetto che vi sia una pressione della memoria locale che porta alla rimozione dei piani dalla cache. Il limite di pressione della cache del piano è 5 GB. (75% di memoria di destinazione visibile da 0-4 GB + 10% di memoria di destinazione visibile da 4 GB a 64 GB + 5% di memoria di destinazione visibile> 64 GB). Quando una cache raggiunge il 75% del limite di pressione, i piani devono essere rimossi dalla cache. Nel mio caso il 75% di 5 GB è 3,75 GB. Quindi è plausibile che questa sia la causa delle alte compilazioni.

C'è un modo per misurare (perfmon, eventi estesi, ...) la rimozione dai piani dalla cache? Quindi posso essere certo che la pressione della memoria locale è davvero la causa delle compilazioni elevate?

Risposte:


9

C'è un XEvent per questo:

query_cache_removal_statistics

Si verifica quando un piano di query viene rimosso dalla cache del piano e le statistiche storiche per l'oggetto stanno per essere distrutte

Quindi qualcosa del tipo:

CREATE EVENT SESSION [PlanCacheEvictions] ON SERVER 
ADD EVENT sqlserver.query_cache_removal_statistics(
    ACTION(sqlserver.sql_text))

Inoltre, se la cache del tuo piano ha un gran numero di piani monouso, considera l'impostazione di ottimizzazione per i carichi di lavoro ad hoc .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.