Обработка на Инфостарте
УНИЧТОЖИТЬ стоит в конце пакета, а надо раньше
Разрыв между последним использованием таблицы и концом пакета - это время, которое она зря пролежала в tempdb. На типовом отчёте таких разрывов половина.
Обработка платная, 1 SM. Приёмы оптимизации запросов, включая этот, разобраны в нашем блоге отдельной статьёй.
Картина по типовому отчёту на пятнадцать пакетов обычно такая: половина временных таблиц не уничтожается вовсе, вторая половина уничтожается одним блоком в самом конце. Всё это время они занимают tempdb, а на нагруженной базе tempdb - общий ресурс, за который дерутся все.
Обработка разбирает пакетный запрос, находит каждую временную таблицу и место её последнего использования, и отдаёт исправленный текст: УНИЧТОЖИТЬ стоит сразу после последнего использования.
Логика не меняется, план запроса не меняется, память освобождается раньше.
Что она делает
Показывает разрыв по каждой таблице
Где создана, где использована в последний раз, был ли УНИЧТОЖИТЬ в исходном тексте вообще.
Отдаёт исправленный текст
Не советы, что поправить, а готовый запрос, который можно вставить обратно.
Работает пачкой через экспортную функцию
Один запрос вы поправите и руками. Сто запросов из своей конфигурации уже нет, поэтому есть вызов ОптимизироватьЗапрос(Текст) из вашего кода: прогоняет разом всё, что нашли поиском по модулям.
Как пользоваться
- 01
Вставить текст пакетного запроса
Одна кнопка, никаких настроек.
- 02
Посмотреть отчёт
По каждой таблице видно, сколько она пролежала лишнего.
- 03
Забрать исправленный текст
Или, если запросов много, вызвать экспортную функцию из своего кода и прогнать всё разом.
Өзіңіз шеше алмай жатырсыз ба? Жазыңыз, бірге қараймыз
1С неге тежелетінінің нақты себебін және оның жұмысын қалай жылдамдатуға болатынын табамыз - жорамалмен емес, технологиялық журнал мен сұрау жоспарлары арқылы. Құжат өткізуді, есептер мен алмасуларды бірнеше есе жылдамдатамыз. Қазақстан мен ТМД бойынша қашықтан.
- Құны
- 150 000 ₸-денжоба үшін; салықтарсыз; тегін аудиттен кейін тіркеледі
- "ауыр" операциялар бойынша әдеттегі нәтиже
- сағаттар → минуттар
Тақырып бойынша талдаулар
Оптимизация ночного регламента 1С без переписывания: 4 антипаттерна, которые съедают окно
Ночной регламент переоценки товаров рос с 55 до 100 минут и подбирался к границе окна. Обработку на 9 400 строк не переписывали: время утекало в пяти конкретных местах, и каждое чинится точечно. Разбираем универсальные антипаттерны регламентных заданий 1С, методику проверки "было / стало" и то, как найти те же места у себя.
"tempdb is full": ошибка 9002 в 1С - тушим за пять минут и убираем навсегда
Посреди рабочего дня у всех разом выпадает "Ошибка СУБД" про tempdb и транзакции - и работа встаёт. В сообщении уже есть весь диагноз, если прочитать его по частям. Разбираем, почему журнал служебной базы tempdb переполняется даже на мощном сервере, как тремя командами за пять минут найти держателя журнала и как настроить tempdb и код, чтобы 9002 не возвращалась.
Длинные транзакции в 1С: где они рождаются в коде и как их разбить
"Сделаем всё в одной транзакции, чтобы было атомарно" - фраза, после которой база встаёт в пик. Длинная транзакция держит блокировки, копит версии строк в tempdb, не даёт очищаться журналу, а при сбое откатывается столько же, сколько работала. Разбираем типовые места в коде 1С, где такие транзакции появляются, как их найти и как разбить на порции, не потеряв целостность данных.
8 приёмов оптимизации запросов 1С: с кодом "до/после" и боевыми замерами
Ни одно из ускорений в 2-6 раз на нашем проекте ценообразования не потребовало менять бизнес-логику - все тормоза жили в том, как код обращается к данным. Разбираем восемь типовых болезней с примерами кода и замерами: от среза без отбора (39 минут → 6 секунд) до запроса в цикле (810 → 43 с). В конце - чек-лист для самопроверки.
Жиі қойылатын сұрақтар
Можно отдать ей объект Запрос, чтобы текст правился сам перед выполнением?
Готовой обёртки над объектом Запрос нет, и у неё была бы цена: в отладчике и технологическом журнале был бы виден один текст, а выполнялся бы другой. Из кода вызывается ОптимизироватьЗапрос: текст на входе, исправленный на выходе. Для отчёта есть РасставитьУничтожить, для разбора без правки текста АнализироватьПакет.
Есть ли от этого заметный выигрыш?
Зависит от пакета: выигрыш виден на длинных пакетах и живущем менеджере временных таблиц, где таблица иначе пролежала бы в tempdb до конца пакета. На коротком пакете из двух-трёх таблиц разница в пределах шума. В одном случае из практики запрос каскадного ценообразования после обработки выполнился на 20 % быстрее.
А если одно имя временной таблицы создаётся в пакете несколько раз?
С версии 1.2 это поддержано: каждая жизнь имени считается отдельно, и УНИЧТОЖИТЬ встаёт раньше пересоздания. До 1.2 на таком пакете промежуточный УНИЧТОЖИТЬ выбрасывался, и запрос падал с ошибкой "Временная таблица уже существует". Пакеты с двумя и тремя жизнями имени проверены выполнением.
Что будет с УНИЧТОЖИТЬ, которые в тексте уже стоят?
Они переставляются на свои места, и повторный прогон ничего не дублирует. Таблицы, которые живут до последнего пакета, обработка не трогает: менеджер временных таблиц закроется сам, и об этом сказано в отчёте.
Зависит ли она от конфигурации и обращается ли к базе?
Нет. Обработка работает только с текстом запроса: к данным, метаданным и СУБД не обращается, поэтому подходит к любой конфигурации. Платформа 8.3, управляемые формы, код открыт.
Не собьют ли разбор комментарии и похожие имена таблиц?
Нет. Имя таблицы в комментарии // или в строковом литерале использованием не считается, имена ищутся по границам слова, так что ВТ_Товары и ВТ_Товары2 не путаются. Регистр не важен, английские SELECT INTO и DROP понимаются, вложенный подзапрос В (ВЫБРАТЬ ...) считается использованием.
1С жүйеңізге тегін экспресс-аудит
1-2 күнде базаңызды қарап, өнімділік қайда жоғалып жатқанын табамыз және не істеу керегін айтамыз. Міндеттемесіз.
Тапсырманы талқылайық
Ең жылдамы WhatsApp: тапсырма туралы бірер жол жазыңыз, жұмыс күні ішінде жауап береміз.