У меня есть сохраненный процесс, который обрабатывает большой объем данных (в этом примере около 5 миллионов строк). Производительность сильно варьируется. Я запустил процесс всего за 15 минут и видел, как он длится 4 часа.
Для обслуживания и проверки правильности логики и обработки у нас есть SP, разбитый на разделы:
TRUNCATE
и заполните рабочую таблицу (проиндексированную), которую мы можем проверить позже с помощью инструментов автоматического тестирования.
Соедините несколько таблиц вместе (включая некоторые из этих рабочих таблиц), чтобы создать другой рабочий стол
Повторяйте 1 и / или 2, пока не будет получен окончательный результат.
Меня беспокоит то, что это один SP, и поэтому он получает план выполнения при первом запуске (даже WITH RECOMPILE
). Но в то время рабочие таблицы (постоянные таблицы в рабочей схеме) пусты.
Я обеспокоен тем, что независимо от схемы индексации план выполнения будет плохим.
Я рассматриваю возможность разрыва SP и вызова отдельных SP изнутри, чтобы они могли воспользоваться переоцененным планом выполнения после построения данных в рабочих таблицах. Я также видел ссылку на использование EXEC для запуска динамического SQL, который, очевидно, может также получить RECOMPILE
.
Я все еще пытаюсь получить разрешения SHOWPLAN
, поэтому я летаю совершенно слепо.