Quand SQL Server avertit-il d'une allocation de mémoire excessive?

18

Quelles sont les conditions qui produisent un avertissement de plan d'exécution "Subvention excessive" ?

L'allocation de mémoire de requête a détecté "ExcessiveGrant", ce qui peut affecter la fiabilité. Taille de la subvention: 5128 Ko initiaux, 5128 Ko finaux, 16 Ko utilisés.

SSMS

Plan SSMS

Propriétés SSMS

Explorateur de plans

Explorateur de plans

Showplan xml

<Warnings>
    <MemoryGrantWarning GrantWarningKind="Excessive Grant"
        RequestedMemory="5128" GrantedMemory="5128" MaxUsedMemory="16" />
</Warnings>
Paul White réintègre Monica
la source

Réponses:

19

Pour produire cet avertissement:

  1. La mémoire maximale utilisée doit être inférieure à 5% de la mémoire accordée; ET
  2. La requête doit utiliser le sémaphore de ressource normal (pas petit)

Pour utiliser le sémaphore de ressource standard, la requête doit:

  • Avoir accordé plus de 5 Mo de mémoire (5120 Ko, 640 pages de 8 Ko); OU
  • Avoir un coût total du plan estimé de plus de 3 unités et ne pas être un plan trivial

Exigences de version du serveur :

  • SQL Server 2014 SP2 (12.0.5000) ou version ultérieure
  • SQL Server 2016 SP1 (13.0.4001) ou version ultérieure
  • SQL Server 2017 RTM (14.0.1000) ou version ultérieure
Paul White réintègre Monica
la source