Блокировка объекта последовательности

Aug 19 2020

У нас возникла проблема с имеющимся у нас объектом последовательности, который называется много. Он используется для присвоения значения перед вставкой записи в таблицу.

Сегодня я увидел, что более 700 сеансов (все пытались получить следующее значение из объекта последовательности) были заблокированы сеансом, который пытался получить следующее значение из объекта последовательности с типом ожидания PAGELATCH_EX. Остальные 700+ сеансов ожидали LATCH_EX.

Когда я заглянул в ресурс ожидания, он имел в виду sys.sysobjvalues.

Мне любопытно, почему это может происходить, и видели ли это другие люди. Недавно мы изменили значение CACHE для этой последовательности с DEFAULT (50) на 200. Я предполагал, что это улучшит производительность вызова последовательности, учитывая, что мы так активно ее используем, но, возможно, я ошибался.

Мы используем SQL Server 2012 SP4.

Ответы

LowlyDBA-JohnMcCall Aug 28 2020 at 20:58

Остальные 700+ сеансов ожидали LATCH_EX .... Недавно мы изменили значение CACHE для этой последовательности с DEFAULT (50) на 200.

Если у вас 700 сеансов ожидания, я сначала подумал, что кеш должен быть намного больше, учитывая рабочую нагрузку. Я бы рекомендовал попробовать что-то в диапазоне 500-1000 (и, возможно, продолжать увеличивать), пока вы не увидите, что ожидания либо стабилизируются, либо уменьшаются. Должна быть золотая середина, которую вы можете найти с большим значением кеша.