В длинных пакетных запросах временные таблицы обычно живут до самого конца пакета: УНИЧТОЖИТЬ либо забывают, либо сваливают все в конец «для порядка». Всё это время СУБД держит таблицы в tempdb — на тяжёлых отчётах это лишние гигабайты и лишние секунды. Обработка анализирует пакет и расставляет УНИЧТОЖИТЬ ровно там, где каждая временная таблица использована в последний раз.
Что делает
- Разбирает пакетный запрос: находит все временные таблицы (ПОМЕСТИТЬ/INTO) и место последнего использования каждой.
- Показывает отчёт: где создана, где последний раз использована, был ли УНИЧТОЖИТЬ в исходном тексте.
- Генерирует оптимизированный текст: УНИЧТОЖИТЬ вставлен сразу после последнего использования; существующие УНИЧТОЖИТЬ переставляются на правильные места (повторный прогон ничего не дублирует).
- Таблицы, живущие до последнего пакета, не трогает — менеджер временных таблиц закроется сам, о чём честно пишет в отчёте.
Что учтено в разборе
- Комментарии // и строковые литералы: упоминание таблицы в комментарии или строке использованием не считается.
- Поиск имени по границам слова: ВТ_Товары и ВТ_Товары2 не путаются.
- Регистронезависимость и англоязычный синтаксис (SELECT … INTO, DROP).
- Вложенные подзапросы «В (ВЫБРАТЬ …)» считаются использованием.
Принцип безопасности
Обработка работает только с текстом запроса: к данным, метаданным и СУБД не обращается. Открыли — вставили текст — получили оптимизированный вариант и отчёт.
Зачем это вам
Из практики оптимизации больших баз: в типовом «отчёте на 15 пакетов» половина временных таблиц не уничтожается вовсе, а вторая половина — одним блоком в конце. На базах в сотни гигабайт это заметная нагрузка на tempdb при каждом запуске отчёта. Расстановка УНИЧТОЖИТЬ по месту последнего использования — самая дешёвая оптимизация пакетного запроса: ничего не переписывается, план не меняется, память освобождается раньше.
Совместимость
1С:Предприятие 8.3, управляемые формы, любая конфигурация (обработка не зависит от метаданных). Код открыт.
Что в файле
Внешняя обработка .epf. Вставили пакетный запрос — нажали «Расставить УНИЧТОЖИТЬ» — забрали оптимизированный текст и отчёт по каждой временной таблице.
Проверено на следующих конфигурациях и релизах:
- Розница, редакция 2.3, релизы 2.2.6.18
Вступайте в нашу телеграмм-группу Инфостарт