Уровень серьезности 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. другие объекты.