Бесплатный мини-курс «Поиск медленных запросов и 4 приема их оптимизации».
Занятие 2: Как анализировать запросы без контекста и работать с индексами
Доброго дня, коллеги!
В предыдущем занятии мы уже разобрали, как «поймать» медленные запросы, а также подготовили инструмент Монитор для работы.
Если Вы еще не успели посмотреть первое видео, обязательно вернитесь к нему, прежде чем переходить к новым материалам курса.
Занятие 2. Как анализировать запросы без контекста и работать с индексами
В это занятии мы:
- Рассмотрим пример запроса с поиском без индекса и на его примере научимся проводить анализ
- Увидим, как запрос отображается в Мониторе
- Разберем, почему у запроса может не быть контекста
- Узнаем, как создавать индексы и как ускорить реструктуризацию
- Обсудим минусы индексов
- Познакомимся с составными индексами, разберем, как они работают и как писать условия, попадающие в индексы.
Тайминг ключевых моментов видео:
00:00 — причины выполнения запросов без контекста
06:02 — определение наличия и состава индексов
09:04 — влияние индексов на запросы
11:09 — минусы индексов
11:39 — создание индекса с реструктуризацией по умолчанию
12:45 — настройка MS SQL для ускорения реструктуризации
13:52 — проверка созданного индекса
14:03 — настройка и использование нового механизма реструктуризации
15:46 — выполнение запросов с индексом
16:21 — особенности нового механизма реструктуризации
17:03 — несоответствие индексов и условий
22:22 — описание первого поля во всех таблицах типовых конфигураций
22:53 — итоги второго урока
23:39 — задание ко второму уроку
Чтобы это видео всегда было под рукой
Когда Вы смотрите видео на сайте, по данным просмотров мы понимаем, стоит ли что-то добавить или изменить.
Но для Вас это может быть не всегда удобно, например, если Вы захотите посмотреть видео в пути или без доступа к интернету. Чтобы у Вас была такая возможность, публикуем ссылку на занятие в формате MP4:
Больше, подробнее и понятнее на базовом курсе по ускорению и оптимизации 1С
Если Вы хотите научиться:
- Оценивать текущее состояние системы.
- Проводить диагностику системы и определять: проблема на стороне железа или софта.
- Устанавливать и настраивать инструмент для анализа проблем производительности.
- Находить, анализировать и оптимизировать долгие запросы.
- Выявлять и устранять проблемы со взаимоблокировками и с ожиданиями на блокировках.
- Настраивать регламентные задания на MS SQL.
…приходите на курс Ускорение и Оптимизация 1С. Базовый курс.

На странице Сведения нажал Тест работы (6 сек выполнялся), затем на странице Базы выбрал Анализ->Анализ запросов (получил диалог что Данные успешно проанализированы), затем на странице запросы установил фильтры, нажал обновить и……. пусто)))
Что бы понять что не так, пришлите скрины:
1. Карточки эл-та из спр. Базы
2. Карточки эл-та из спр. Серверы 1С
3. Карточки эл-та из спр. Серверы СУБД
Скорее всего где-то ошибка в настройке, либо не прошла 1 минута после включения настроек.
минута естественно прошла и не одна. Я не вижу тут возможности прикреплять скрины
Спасибо. Ошибку у себя нашел. Отличался путь для чтения и записи логов. Если можно еще вопрос. На странице Запросы на вкладке контекст обфусцированный код. Так должно быть или это участь бесплатной версии?
Так и должно быть т.к. запрос вызывался из конфигурации Монитор, а она обфусцирована.
Для прочих исследуемых баз контекст будет отображаться нормально.
Спасибо большое. Пойду-ка я почитаю как физически хранится составной индекс и как достигается его сбалансированность, если одно из полей «вырожденное».
Удачного изучения!
Если в регистре со срезом последних есть три измерения (Измерение1, Измерение2, Измерение3) и нам надо выбрать данные по Измерение1 и Измерение3, то есть ли разница, куда запишем условия: оба условия в параметры виртуальной таблицы или условие по Измерение1 — в параметры виртуальной таблицы (т.к. попадаем в индекс), а условие по Измерение2 — в раздел «ГДЕ»?
Если написать условие на Измерение1 в параметрах, а Измерение3 в разделе ГДЕ, то скорее всего разницы не будет.
Запрос отработает так же как если бы оба поля были в параметрах вирт. таблицы, будет частичный скан.
Скажу даже больше, если вместо 3го измерения накладывать условие на 2-е, то для MS SQL разницы тоже скорее всего не будет, т.к. там довольно продвинутый оптимизатор, но лучше конечно не рисковать и придерживаться рекомендаций.
Добрый день.
Индекс: Склад — Характеристика- Товар.
Характеристики НЕ используются.
Если указать условие по всем 3 полям, как в Вашем примере, точно будет везде index seek? Смущает, то, что, если можно так выразиться применительно к составному полю, селективность поля «Характеристика» = 0.
Похоже, в этом случае, независимо от того задали условие по характеристике или нет, оптимизатор сделает index seek по полю склад, а потом, index scan по полю Товар. По крайней мере непонятно, чем поиск нужного склада, переход на единственный узел с характеристикой (а он для каждого склад один, т.к. хар-ка всегда одна — пустая, по нашему условию) и потом поиск среди всех листьев, отличается от того же, но без перехода на пустой узел с характеристикой.
Сергей, приветствую!
> Если указать условие по всем 3 полям, как в Вашем примере, точно будет везде index seek?
Да, будет поиск по индексу.
> непонятно, чем поиск нужного склада, переход на единственный узел с характеристикой (а он для каждого склад один, т.к. хар-ка всегда одна – пустая, по нашему условию) и потом поиск среди всех листьев, отличается от того же, но без перехода на пустой узел с характеристикой.
Составной индекс хранится на всех уровнях дерева, т.е. все колонки составного индекса есть в каждой странице.
Возможно вы думаете что на верхнем уровне склад, на более низком Характеристики и т.д., это не так.
Представьте что у вас есть составной хеш из 3х полей С+Х+Т, и каждая страница содержит этот хеш.