Симптоми
Обмислете следния сценарий:
-
Имате много голяма FileStream таблица.
-
Изпълнявате заявка за изтриване на редове в таблицата FileStream, която създава скъп план за заявка, като например такъв, който е филтриран чрез вътрешно съединение към друга голяма таблица в системата.
-
Оптимизатора на заявки избира план за паралелно изпълнение.
В този случайще възникне ssertion и може да получите съобщения за грешка, които наподобяват следното в регистъра за грешки на SQL Server:
Дата и час SPID на SpidNumber : 5553, тежест: 20; щат: 6.
Дата и час SPID SpidNumber SQL Server вътрешна грешка. Диспечерът на FILESTREAM не може да продължи с текущата команда.
Състоянието
Microsoft потвърди, че това е проблем в продуктите на Microsoft, които са посочени в секцията "важи за".
Решение
Проблемът е коригиран в следните сборни актуализации за SQL Server:
За сборните актуализации за SQL Server:
Всяка нова сборна актуализация за SQL Server съдържа всички спешни корекции и всички корекции на защитата, които са били включени в предишната сборна актуализация. Вижте последните сборни актуализации за SQL Server:
Заобиколно решение
За дазаобиколите този проблем,можете да използвате следния метод:
Да местите вътрешната заявка за съединение към отделна Инструкция и да запишете резултатите във временна таблица. След това изпълнете заявката за изтриване, филтрирана от записите във временната таблица. Освен това можете да увеличите прага на разходите за успоредност, за да принудите оптимизатора да сериализира плана на заявката.
Например:
Изберете RefTable. Alias в #T от DB. DBO. OuterTable вътрешна съединение DB. DBO. RefTable в RefTable. Alias = OuterTable. Alias
КЪДЕТО OuterTable. Alias > 30006 и OuterTable. Alias < 30010
ИЗТРИЙте от DB. DBO. Таблица Къде е псевдонимът (SELECT * FROM #T)
Препратки
Научете повече за терминологията , която Microsoft използва, за да опише софтуерни актуализации.