Blocage d'objet de séquence

Aug 19 2020

Nous avons rencontré un problème avec un objet de séquence que nous avons qui s'appelle beaucoup. Il est utilisé pour attribuer une valeur avant qu'un enregistrement ne soit inséré dans une table.

Aujourd'hui, j'ai vu que plus de 700 sessions (toutes essayant d'obtenir la valeur suivante de l'objet séquence) étaient bloquées par une session qui essayait d'obtenir la valeur suivante de l'objet séquence avec un type d'attente PAGELATCH_EX. Les 700 autres sessions étaient en attente sur LATCH_EX.

Lorsque j'ai examiné la ressource d'attente, elle faisait référence à sys.sysobjvalues.

Je suis curieux de savoir pourquoi cela peut se produire et si d'autres personnes ont vu cela. Nous avons récemment changé la valeur CACHE pour cette séquence de DEFAULT (50) à 200. J'ai supposé que cela améliorerait les performances d'appel de la séquence étant donné que nous l'utilisons si fortement, mais je me suis peut-être trompé.

Nous utilisons SQL Server 2012 SP4.

Réponses

LowlyDBA-JohnMcCall Aug 28 2020 at 20:58

Les 700 autres sessions étaient en attente sur LATCH_EX....Nous avons récemment changé la valeur CACHE pour cette séquence de DEFAULT (50) à 200.

Si vous avez 700 sessions en attente, ma première pensée est que le cache doit être beaucoup plus élevé compte tenu de la charge de travail. Je recommanderais d'essayer quelque chose dans la gamme de 500 à 1000 (et peut-être de continuer à augmenter) jusqu'à ce que vous voyiez les attentes se stabiliser ou diminuer. Il devrait y avoir un sweet spot que vous pouvez trouver avec une plus grande valeur de cache.