У меня есть задание ETL (извлечение, преобразование, загрузка, разработанное с помощью Safe FME 2018) и работающее на MS SQL Server 2016. Это задание обрабатывает только обычные данные (без пространственных данных): данные извлекаются из нескольких MS SQL Серверные таблицы, преобразованные с помощью FME и загруженные обратно в базу данных в несколько других таблиц. Задание ETL разделено на 5 подзадач: подзадачи с 1 по 4 записывают свои результаты в несколько таблиц, 5-е подзадача собирает все записанные данные и записывает их в другую базу данных.
Это задание последовательно выполняет множество операторов SQL Некоторые из них довольно сложные и продолжительные (5-10 минут).
Если я запускаю этот процесс несколько раз подряд, используя один и тот же набор данных (около 20 000 записей для обработки), результат очень запутанный:
- Выполнить 1 и 2 в последнюю очередь около 8 минут, как и ожидалось
- прогон 3 никогда не заканчивается: процесс застревает в первом SQL и зависает навсегда.
- Если я убью этот третий прогон и выполню прогон 4 и 5, все в порядке снова, мы до 8 минут.
- пробег 6 снова зависает
- и так далее ...
Понятия не имею, где на go далее с моим анализом ошибок. На мой взгляд, все операторы SQL должны работать нормально. Есть ли на сервере MS SQL какие-либо магические действия c, такие как оптимизация или кэширование запросов или что-то еще, блокирование или блокирование моих запросов? Есть намеки?
С уважением, Тобиас