Бесплатный мини-курс «Поиск медленных запросов и 4 приема их оптимизации».
Занятие 3: Четыре приема оптимизации для ускорения запросов
Доброго дня, коллеги!
Это заключительное занятие мини-курса. Поздравляем, Вы почти дошли до конца! Осталось чуть-чуть :)
Напомним, Вы уже изучили:
- Занятие 1. Как «поймать» медленные запросы
- Занятие 2. Как анализировать запросы без контекста и работать с индексами
Идем дальше :)
Занятие 3. Четыре приема оптимизации для ускорения запросов
В заключительном занятии курса мы:
- Разберем, как функция на поле Условия тормозит запрос.
- Поговорим, как можно и нельзя использовать ВЫБОР КОГДА.
- Разберем, когда условие ИЛИ безопасно, а когда приводит к проблемам.
- Научимся оптимизировать подзапросы через временные таблицы.
Для каждого запроса 1С будет показан пример, как он выглядит на уровне СУБД.
Тайминг ключевых моментов видео
00:00 — особенности индексов в разделенных базах
01:02 — вычисления и функции в условиях запроса
05:27 — безопасные вычисления
06:16 — использование условия ИЛИ в запросе
11:14 — поведение запросов в зависимости от СУБД
13:04 — использование конструкции ВЫБОР КОГДА в запросе
14:57 — пример соединения с подзапросами и виртуальными таблицами
17:13 — оптимизация запросов с помощью временных таблиц
21:42 — индексация временных таблиц
24:46 — итоги третьего урока
25:19 — задание к третьему уроку
26:15 — резюмируем, чему научились за мини-курс
27:18 — информация об основном курсе по оптимизации 1С
28:20 — контакты автора :)
Чтобы это видео всегда было под рукой
Когда Вы смотрите видео на сайте, по данным просмотров мы понимаем, стоит ли что-то добавить или изменить.
Но для Вас это может быть не всегда удобно, например, если Вы захотите посмотреть видео в пути или без доступа к интернету. Чтобы у Вас была такая возможность, публикуем ссылку на занятие в формате MP4:
Решение практического задания
В этом занятии практическое задание не дублирует на 100% действия автора. Чтобы Вы могли проверить себя и понять, все ли правильно сделали, публикуем ссылку на эталонное решение:
Решение практического задания в PDF
Поздравляем!
Наш мини-курс подошел к завершению, и теперь Вы умеете:
- Находить медленные запросы
- Анализировать запросы без контекста
- Работать с индексами — так, чтобы они не приводили к замедлению
- Устранять 4 основные причины замедления запросов.
В общем, стали более крутым специалистом :)
Вы молодец! Продолжайте в том же духе.
Следующий шаг к тому, чтобы разобраться в оптимизации систем на 1С
Мини-курс — очень маленькая часть нашего нового курса по ускорению и оптимизации 1С. Если Вам нужны базовые знания по теме, Вы хотите попрактиковаться и получить обратную связь от опытного специалиста, рекомендуем Ускорение и Оптимизация 1С. Базовый курс.
На курсе Вы научитесь:
- Оценивать состояние системы в любой момент времени
- Быстро находить причины замедления в программном коде
- Настраивать регламентные задания для обслуживания базы на MS SQL
- Видеть динамику производительности за определенный период
- Устранять ожидания на блокировках
- Решать проблемы со взаимоблокировками.

Решение первой практической задачи на Postgres вызвало глубочайшее недоумение.
Вот какие результаты у меня получились:
Исходный текст запроса — 2.5 с
Исходный текст запроса без регистра накопления — 3.7 с
Исходный текст запроса с параметрами среза последних — 5 с
Правильное решение из PDF-файла — 5 с
Исходный текст запроса, в котором в условия соединения с РН добавлено «И ЛОЖЬ» — 15 мс!
Т.е. запрос замедляется если указать параметры среза последних или убрать из текста запроса регистр накопления.
Платформа 8.3.17.1851, Postgres 13.2
Очень интересно однако, то что у разных СУБД оптимизатор работает по разному это известно тут ничего нового нет, но обычно действует правило, чем проще запрос, тем он лучше работает на любой СУБД.
Ваш опыт еще раз доказывает что универсальных правил очень мало, и нужно подбирать решение для конкретной ситуации.
К сожалению у меня нет сейчас возможности протестировать на PG этот запрос.
Добрый день. Спасибо за курс и такой хороший инструмент, как Монитор. По Монитору есть небольшой нюанс: у меня сервер 1С работает на нестандартном порту и при добавлении сервера в ТЧ справочника базы указал пусть с портом (UPP:1641). При запуске анализа запросов поймал ошибку о невозможности создания каталога, так как в имени каталога используются недопустимые символы. При просмотре курса увидел добавление сервера с нестандартным портом и после исправления имени анализ запросов заработал.
Андрей, здравствуйте.
Спасибо за добрые слова.
Насчет нюанса, в настройках в качестве сервера 1С указывается имя компьютера, соответственно никакой порт так указывать не нужно.
В новой версии Монитора уже сделана проверка на этот счет :)
Отличный курс. Спасибо!
Добрый день.
Благодарим за отзыв!
Большое спасибо за курс!
Но у меня возникла проблема с Монитором.
Исторически сложилось, что у нас много баз с именем типа -, например, ERP-Work, Acc-IK и т.д.
При попытке включения в Мониторе запросов возникает ошибка вида
Microsoft OLE DB Provider — Неправильный синтаксис около конструкции «-»
Я понимаю, что виноват дефис в имени базы SQL, но можно ли это как-нибудь вылечить кроме переименовывания базы?
Вам спасибо за хорошую оценку, рад что понравилось :)
Что касается проблемы, то тут дело в том как задается имя расширенного события при создании/удалении, сейчас это происходит без кавычек, поэтому возникает такая проблема, как выяснилось символ «-» воспринимается как служебный в этом случае.
Для решения вам нужно в конфигурации монитора открыть общие макеты с префиксом «EE_» кроме EE_ПолучитьДанные, и везде где поле [ИмяСессииРасширенногоСобытия] не заключено в одинарные кавычки, заключить в двойные кавычки
Например, было:
BEGIN
DROP EVENT SESSION [ИмяСессииРасширенногоСобытия]
ON SERVER;
END
должно стать:
BEGIN
DROP EVENT SESSION "[ИмяСессииРасширенногоСобытия]"
ON SERVER;
END
И так во всех макетах, если [ИмяСессииРасширенногоСобытия] заключено в одинарные кавычки, то его не трогаете.
Спасибо вам что указали на такую особенность, уже включил исправление в след. обновление.
Добрый день! Большое спасибо за курс! Успешно применили к рабочей базе и нашли уже несколько не оптимальных запросов. Есть вопрос — на закладке Сведения указано, что срок лицензии заканчивается 31.12.21. Далее программа не будет доступна?
День добрый!
Анализ запросов доступен без ограничений, активация нужна только для анализа блокировок и взаимоблокировок.
Добрый день! Спасибо за курс!
Но у меня не получается восстановить тестовую базу. В файловом варианте платформа 20 пишет что привышен размер таблицы. А в sql пишет, что бекап создан в старшей версии sql. У меня sql 2014. Нет вариантов, только переустанавливать sql сервер?
Алексей, здравствуйте.
Тут есть 2 возможных варианта.
1. Поставить MS SQL Developer 2019, он бесплатен. Для этого не нужно удалять предыдущую версию MS SQL. Это вариант кажется наиболее предпочтительным.
2. Вы можете загрузить dt в клиент — серверную базу на вашей версии MS SQL, но это может занять существенное время.
Во-первых, большое спасибо. Особенно интересно было про индексацию временных таблиц.
Во-вторых, если это имеет отношению к делу, не могли бы Вы пояснить, когда использование ВЫРАЗИТЬ для полей составного типа в условиях запроса может приводить как к ускорению так и замедлению запроса?
Не смогу уже найти точный текст, но начал медленно работать запрос с приблизительным условием вида ГДЕ ЗаказПокупателя.Контрагент.Потенциал = 50000.
Поправили на Выразить(ЗаказПокупателя.Контрагент КАК Справочник.Контрагенты).Потенциал = 5000 и все ускорилось на порядок. Спустя пару месяцев — это же дало дикие тормоза и откат на условие без ВЫРАЗИТЬ все восстановил (индекса на поле потенциал нет, контрагент — составной тип ссылки на 2-а справочника: контрагенты и потенциальные клиенты, сбор статистики раз в неделю и полный, а сбой произошел спустя месяцы, кол-во записей существенно не менялось). Я понимаю, что это «подземный стук в гараже», и не прошу помощи в решении данного вопроса. Но может есть какие-то общие принципы?
Сергей, вам спасибо за положительную оценку.
По поводу ВЫРАЗИТЬ, это имеет смысл только если нужно вернуть один или несколько из многих типов, иначе это не то что бы тормозит, скорее это просто никак не помогает.
Насчет вашей ситуации, нужно видеть текст запроса 1С и SQL до и после изменения, а так же план запроса до и после оптимизации, ну и структуру индексов конечно.
А вообще разыменование в условии это не очень хорошо, возможно имеет смысл сначала отобрать контрагентов по условию Контрагент.Потенциал = 50000, а уже потом использовать условие ЗаказПокупателя.Контрагент, при этом естественно и Контрагент и Потенциал должны быть проиндексированы. Но это все писями по воде виляно, совет в слепую, пока нет текстов и плана сложно что-то говорить.
Спасибо большое, отличный мини-курс!!!
Александр, рады, что Вам понравилось! :)
Очень интересно и доступно. Спасибо большое за ньюансы.
Добрый день.
Благодарим за отзыв. Надеемся материал был Вам полезен.
Спасибо, много знаний не бывает, бывают пробелы в знаниях. Отличное вступление к курсу по оптимизации. Теперь точно уверен — покупка правильный выбор. ;)
Вам спасибо!