У меня есть процесс ETL, который включает в себя хранимую процедуру, которая сильно использует операторы SELECT INTO
(минимально регистрируемые и, следовательно, быстрее, поскольку они генерируют меньше трафика журнала). Из партии работы, которая имеет место в одной конкретной сохраненной хранимой процедуре, некоторые из самых дорогих операций - это энергичные буферы, которые, как представляется, просто забудут результаты запроса, а затем скопируют их в только что созданный стол.Способы избегать операций очереди на SQL Server
Документация MSDN на eager spools довольно редкая. Кто-нибудь имеет более глубокое понимание того, действительно ли это необходимо (и при каких обстоятельствах)? У меня есть несколько теорий, которые могут или не могут иметь смысл, но не удастся устранить их из запросов.
Файлы .sqlplan довольно большие (160kb), поэтому я думаю, что, вероятно, нецелесообразно публиковать их непосредственно на форуме.
Итак, вот несколько теорий, которые могут быть пригодны для конкретных ответов:
- Запроса используют некоторые пользовательские функции для преобразования данных, таких как разбор отформатированных дат. Требуется ли это преобразование данных, чтобы использовать горячие буферы для распределения разумных типов (например, длины varchar) в таблице до того, как он их построит?
- Как расширение вопроса выше, имеет ли кто-либо более глубокое представление о том, что делает или не управляет этой операцией в запросе?
Простая изоляция может быть применима в качестве технологических запросов из промежуточной области, скопированной из источника. Кроме того, даже если это не устраняет мою конкретную проблему, она добавляет немного понимания, поскольку это не упоминается ни в одной из литературы MSDN, которую я мог бы найти в отношении энергичных операций с катушкой. – ConcernedOfTunbridgeWells 2008-09-18 09:57:58