Вопросы о магазине версий tempdb

9

Сегодня мы столкнулись с ошибкой:

Ошибка: 3967, серьезность: 17

и из того, что я могу сказать, это в основном «магазин полной версии». Это вызвало некоторые вопросы, на которые мне было трудно ответить, так как в моем магазине у нас никогда не было этой ошибки раньше:

  • Если задан максимальный размер (на основе общего размера базы данных tempdb или иным образом), будет ли он динамическим?

  • Есть ли настройка, которая сделает его динамическим, если это не так?

  • Можем ли мы настроить оповещения на основе этого? (т. е. DMV, используемые для отслеживания размера и т. д.)

Travis
источник

Ответы:

7

Уровень серьезности 17 указывает, что в SQL Server исчерпан необходимый ресурс. Обычно вы видите это, когда в базе данных заканчивается свободное место. В этом случае кажется, что база данных tempdb используется для чтения строк версии зафиксированного снимка с фиксацией для запроса, который необходимо передать в базу данных tempdb.

Это может быть довольно распространенным явлением, если tempdb имеет ограниченный максимальный размер, и делается попытка плохо написанного запроса, который, например, выполняет очень большое перекрестное соединение.

Вы можете использовать этот запрос, чтобы увидеть текущий размер хранилища версий в базе данных tempdb:

SELECT *
FROM sys.dm_os_performance_counters dopc
WHERE dopc.counter_name LIKE 'Version %';

У Technet есть интересная статья об использовании хранилища версий по адресу https://technet.microsoft.com/en-us/library/cc966545.aspx#EDAA.

На этой странице MSDN упоминается ошибка 3967:

Когда в базе данных tempdb не хватает места, компонент Database Engine вынуждает хранилища версий сокращаться. В процессе сжатия самые длительные транзакции, которые еще не создали версии строк, помечаются как жертвы. Сообщение 3967 генерируется в журнале ошибок для каждой транзакции жертвы. Если транзакция помечена как жертва, она больше не может читать версии строк в хранилище версий. Когда он пытается прочитать версии строк, генерируется сообщение 3966, и транзакция откатывается. Если процесс сжатия завершается успешно, пространство становится доступным в базе данных tempdb.

Ни одна из страниц, на которые я ссылался выше, не содержит явных советов о максимальном размере хранилища версий в базе данных tempdb, что заставляет меня полагать, что единственным ограничением является максимальный настроенный размер самой базы данных tempdb, за вычетом свободного места, используемого в базе данных tempdb. другие объекты.

Макс Вернон
источник