Проблемы
Рассмотрим следующий сценарий.
-
У вас очень большая таблица FILESTREAM.
-
Вы запускаете запрос на удаление строк в таблице FILESTREAM, который создает ресурсоемкий план запросов, например элемент, отфильтрованный внутренним объединением с другой большой таблицей в системе.
-
Оптимизатор запросов выбирает план параллельного выполнения.
В этом случаепоявится ssertion, и в журнале ошибок SQL Server могут появиться сообщения об ошибках, аналогичные указанным ниже.
DateTime SPID SpidNumber ошибка: 5553, уровень серьезности: 20, состояние: 6.
Дата и время SPID SpidNumber внутренней ошибки SQL Server. Диспетчер FILESTREAM не может продолжить выполнение текущей команды.
Статус
Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе "Применяется к".
Решение
Эта проблема исправлена в перечисленных ниже накопительных обновлениях для SQL Server.
-
Накопительное обновление 6 для SQL Server 2016 с пакетом обновления 2 (SP2)
-
Накопительное обновление 14 для SQL Server 2016 с пакетом обновления 1 (SP1)
-
Накопительное обновление 2 для SQL Server 2014 с пакетом обновления 3 (SP3)
-
Накопительное обновление 16 для SQL Server 2014 с пакетом обновления 2 (SP2)
Сведения о накопительных обновлениях для SQL Server.
Все новые накопительные обновления для SQL Server содержат все исправления и все исправления для системы безопасности, включенные в предыдущий Накопительный пакет обновления. Ознакомьтесь с самыми последними накопительными обновлениями для SQL Server.
Обходное решение
Пока неудается устранить эту неполадку,в подразделении y может использоваться следующий метод:
Переместите запрос INNER JOIN в отдельную инструкцию и сохраните результаты во временную таблицу. Затем выполните запрос на удаление, отфильтрованный по записям во временной таблице. Кроме того, вы можете увеличить пороговое значение затрат для параллелизма, чтобы оптимизатор мог сериализовать план запроса.
Пример:
Выберите RefTable. alias в #T из DB. dbo. OuterTable INNER JOIN DB. dbo. RefTable ON RefTable. alias = OuterTable. alias
ГДЕ OuterTable. alias > 30006 и OuterTable. alias < 30010
УДАЛИТЬ из базы данных DB. dbo. Таблич WHERE Alias IN (SELECT * FROM #T)
Ссылки
Сведения о терминах , Корпорация Майкрософт использует для описания обновлений программного обеспечения.