Bloqueio de objetos de sequência

Aug 19 2020

Estamos enfrentando um problema com um objeto de sequência que temos e que é muito chamado. É usado para atribuir um valor antes de um registro ser inserido em uma tabela.

Hoje eu vi que mais de 700 sessões (todas tentando obter o próximo valor do objeto de sequência) estavam sendo bloqueadas por uma sessão que estava tentando obter o próximo valor do objeto de sequência com um tipo de espera de PAGELATCH_EX. As outras 700+ sessões estavam esperando em LATCH_EX.

Quando examinei o recurso de espera, ele se referia a sys.sysobjvalues.

Estou curioso para saber por que isso pode estar acontecendo e se outras pessoas viram isso. Recentemente, alteramos o valor CACHE para esta sequência de DEFAULT (50) para 200. Presumi que isso melhoraria o desempenho da chamada da sequência, visto que a usamos muito, mas possivelmente eu estava errado.

Estamos usando o SQL Server 2012 SP4.

Respostas

LowlyDBA-JohnMcCall Aug 28 2020 at 20:58

As outras 700+ sessões estavam esperando em LATCH_EX....Recentemente, mudamos o valor CACHE para esta sequência de DEFAULT (50) para 200.

Se você tiver 700 sessões de espera, meu primeiro pensamento é que o cache precisa ser muito maior devido à carga de trabalho. Eu recomendaria tentar algo na faixa de 500-1000 (e talvez continuar aumentando) até ver as esperas se estabilizarem ou caírem. Deve haver um ponto ideal que você possa encontrar com um valor de cache maior.