Поиск часто повторяющихся запросов. Мониторинг производительности

05.10.23

База данных - HighLoad оптимизация

Расскажем, как найти часто повторяющиеся запросы.

Постоянный процесс поиска узких мест в производительности обслуживаемой базы или баз - это архиважная задача, которая должна решаться в первую очередь. Мы должны делать так чтобы наши сервисы работали быстро и пользователи были довольны. Но тут у нас с технической стороны возникают вопросы: 

  • Как найти проблемные участки в коде, решение которых даст наиболее ощутимый эффект? 
  • С чего лучше всего начать выполнять оптимизацию?
  • Где проблема находится в конфигурации?
  • Какую нагрузку дают эти запросы? Какая длительность выполнения? Как часто повторяются?

На такие вопросы мы сегодня дадим ответ - расскажем об одном из возможных путей решения. Инструменты, которые нам понадобятся БЕСПЛАТНЫ - Фреймворк Мониторинг производительности. От вас понадобится холодная голова и 15 минут свободного времени. Работаем в режиме: быстро, просто, качественно и точка.

 

Шаг 1. Настройка загрузки длительных запросов
 

Искать долгие и длительные запросы, которые выполняются 50-100 с и более мы сможем, если подключим замер Длительные запросы (смотрим в статье 5 простых шагов и 15 минут на разворачивание инструмента мониторинга проблем производительности базы 1С). 

Только в этом случае время сохранения запросов мы установим в районе 5с, при желании можете уменьшить это время самостоятельно. Но значения меньшие 1с ставить не рекомендуем, вам будет достаточно для начала и такого порогового значения.

 

Шаг 2. Настройка замера - Частотный анализ запросов

 

Когда мы смотрим журнал запросов, то мы видим множество замеров. Есть запросы длительностью 5 с, 8 с и другие. Как нам понять, какова причина того что этот запрос попал в замер? Возможно,  в этот момент пользователь попал на блокировку или сервер просел под выполнением какого-либо отчета, т.е. это была случайность. Иными словами, оптимизировать запрос, который выполняется 1 раз в месяц, неэффективная цель. Смотрим рисунок ниже в качестве иллюстрации примера.

 

 

Более взвешенное решение мы сможем принять, если будет информация о количестве повторений такого запроса в день или месяц. И в этом случае нам будет проще принять решение. В итоге мы хотим получить отчет вот в такой форме:

 

 

Для того чтобы получить требуемую информацию, нами был специально создан плагин Частотный Анализ (кроме частоты запросов можно считать частоту появления различных ошибок, блокировок и другую технологическую информацию). Принцип работы этого плагина похож на принцип работы плагина для Postgres pg_state_statements с отличием. Мы можем сохранить контекст точки вызова в коде 1С. Что позволит с большим успехом выполнять поиск проблемного участка в конфигурации. Теперь давайте выполним настройку этого замера:

а) Скачиваем плагин ЧастотныйАнализ.epf с репозитария Фреймворка. И загружаем его в дополнительные отчеты и обработки. Обязательно указываем подсистему замеры и режим работы в статус использование.

б) Создаем новый замер, который назовем Частотный анализ. Указываем некоторые параметры, которые являются обязательными:

  • Наименование - Частотный анализ
  • Путь к файлу - пишем слово нет
  • Загрузить в реальном времени - истина
  • Загружать автоматически - истина. Еще дополнительно настраиваем расписание работы.
  • Тип замера - произвольный. И сразу указываем имя дополнительной обработки - Частотный анализ.epf
  • Глубина хранения дней - для того чтобы замеры не копились вечно, рекомендуем указать параметр отличный от 0. Выбирать следует с учетом группировок, если вы поставили группировку месяц и хотите сохранять два последних месяца, то ставьте период 90 дней.

 

 

в) Выполняем настройку плагина по созданному замеру. Теперь мы будем выполнять самый интересный этап создания нового замера. Мы постарались сделать эту процедуру прозрачной и понятной. Сначала мы запускаем форму настроек плагина в дополнительных обработках.

 

 

Далее настраиваем форму по своим критериям. 

  • Замер - Частотный анализ. Это тот замер для которого мы делаем настройки. Пункт б).
  • Источник данных Замер - Длительные запросы. Замер, который мы создали на первом шаге. Данный замер у вас уже есть или вы его должны создать отдельно в соответствии с инструкцией, которая приведена на шаге 1 (ссылка на статью).
  • Источник данных Свойство - Context, это то свойство, по которому мы будем искать совпадения.
    В данном случае самый удобный параметр это контекст. Если выбрать запросы, то нам будут мешать параметры, которые платформа автоматически добавляет в SQL запрос, к тому же различные комбинации RLS также будут дробить результат.
  • Размер обрабатываемого пакета, мы установили в 10000 строк
  • Аналитика 1 - p:processName. Это имя базы, нам понадобится чтобы разделять замеры по различным базам.
  • Дополнительное свойство - SQL - SQL текст запроса. Это параметр будет сохраняться в результирующем  списке замера.
  • Функция агрегации - Первое. Указывает как будет сохраняться значение при подсчете совпадающих строк.
    • Первое - будет браться из первой записи,
    • Последнее - будет обновляться от каждой последней записи,
    • Слияние - все строки будут складываться (будьте аккуратнее с этим параметром, т.к. могут получиться очень огромные простыни текста),
    • Максимум - берется максимальное,
    • Минимум - минимальное.
  • Варианты группировок. Определяет в каких временных разрезах будет идти расчет. Мы считаем что самые удобные варианты - месяц и неделя. Будут создаваться отдельные записи замеров с датой начала периода (например 01.10.2023 00:00:00 для начала месяца)
    • Без периода
    • Год
    • Месяц
    • Неделя
    • День
  • Обработка текста. Позволяет убирать лишние и паразитные значения, для того чтобы повысить вероятность совпадения.
    • Удалять цифры - будут удаляться все цифровые символы (0-9)
    • Удалять спец символы - эта настройка оставит только буквы А-Яа-яA-Za-z.

 

 

После выполнения настроек сохраняем и выполняем первую обработку или дожидаемся запуска регламентного задания.

 

г) Настраиваем отображение списка замера. Указываем дополнительные поля для удобства работы в списке. Мы рекомендуем добавить следующий набор полей:

  • Тип группировки - выводит информацию о выбранных группировках - месяц, год, неделя, день
  • Дата группировки
  • Количество совпадений - показывает количество совпадений шаблонов. Для этого свойства обязательно поставьте признак числовой. Тогда вы сможете в журнале выполнять по нему сортировку.
  • Длительность мкс сумма - суммарное время выполнения всех похожих запросов.
  • Значение аналитика 1 - выводится аналитика группировки 1, в нашем случае имя базы СУБД.
  • Значение - само значение аналитики
  • Значение дополнительное свойство - произвольное значение выбранного свойства замеров, в нашем случае SQL текст запроса.

 

 

Шаг 3. Выполняем анализ результатов

 

После того как мы выполнили все необходимые настройки, запустили обработку данных, мы можем наконец-то провести анализ полученных результатов и создать задачки на исправление найденных проблемных запросов. Сначала выполним сортировку по количеству совпадений (или по суммарной длительности) и возьмем первое событие.

 

 

Давайте посчитаем среднее время выполнения запроса 933 336 с / 62 616 = 15 с. Время его работы в месяц 259 часов или почти 11 дней. Как вы понимаете данная проблема требует оптимизации.

Смотрим контекст:

 
 Контекст

 

 

У нас есть даже SQL запрос, который мы можем выполнить. Разбор данного случая мы приведем в отдельной статье. Это тоже очень интересный отдельный случай. Тот момент, когда в тиражной конфигурации применяют не очень хорошее решение с точки зрения производительности, но зато, казалось бы, отличное с точки зрения пользователя.

 

 

Дальнейший разбор, анализ и исправление этой ситуации мы проведем в следующей статье. Ожидайте...

 

 

P.S. У нас совсем недавно вышел новый релиз фреймворка. Кроме текущего плагина частотного анализа событий у нас теперь есть поддержка разбора технологического журнала под linux, спасибо GenVP, два новых отчета - контроль изменения производительности и количество сеансов лицензий.

См. также

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    127255    689    389    

740

Конфигурация Session Monitor

Мониторинг Инструменты администратора БД Платформа 1С v8.3 Россия Платные (руб)

Конфигурация Session Monitor предназначена для мониторинга сервера 1С с целью отслеживания чрезмерной нагрузки от конкретных сеансов и скорости реакции рабочих процессов.

1500 руб.

01.12.2020    14471    35    0    

51

Мониторинг баз и серверов 1С

Журнал регистрации Мониторинг Платформа 1С v8.3 Платные (руб)

В сферу обязанностей при работе с клиентами входит контроль работы баз данных и серверов 1С. Нужно понимать что происходит в базах, есть ли ошибки, зависания у пользователей и фоновых задач, блокировки или какое-то необычное поведение системы, получение информации о причинах возникновения проблем и их оперативное устранение и т.д. В качестве источников информации использую консоль кластеров 1С, технологический журнал 1С, журналы регистрации базы 1С. Для автоматизации части операций мониторинга и анализа создал инструмент на основе 1С.

9000 руб.

28.08.2019    31253    15    21    

66

Анализируем SQL сервер глазами 1С-ника

HighLoad оптимизация Инструменты администратора БД Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Обработка для простого и удобного анализа настроек, нагрузки и проблем с SQL сервером с упором на использование оного для 1С. Анализ текущих зааросов на sql, ожиданий, конвертация запроса в 1с и рекомендации где может тормозить

1 стартмани

15.02.2024    8515    170    ZAOSTG    74    

102

Начните уже использовать хранилище запросов

HighLoad оптимизация Запросы

Очень немногие из тех, кто занимается поддержкой MS SQL, работают с хранилищем запросов. А ведь хранилище запросов – это очень удобный, мощный и, главное, бесплатный инструмент, позволяющий быстро найти и локализовать проблему производительности и потребления ресурсов запросами. В статье расскажем о том, как использовать хранилище запросов в MS SQL и какие плюсы и минусы у него есть.

11.10.2023    16731    skovpin_sa    14    

101

MS SQL Server: изучаем планы запросов

Запросы HighLoad оптимизация Запросы Бесплатно (free)

Многие знают, что для ускорения работы запроса нужно «изучить план». При этом сам план обычно обескураживает: куча разноцветных иконок и стрелочек; ничего не понятно, но очень интересно! Аналитик производительности Александр Денисов на конференции Infostart Event 2021 Moscow Premiere рассказал, как выполняется план запроса и что нужно сделать, чтобы с его помощью находить проблемы производительности.

20.06.2023    17397    Филин    37    

114

tempdb, почему она всё время растет?

Администрирование СУБД Мониторинг Бесплатно (free)

С проблемами распухания tempdb при работе с базой данных 1С регулярно сталкиваются и админы, и разработчики. О том, как мониторить, диагностировать и решать такие проблемы, на конференции Infostart Event 2021 Moscow Premiere рассказал Александр Криулин.

14.06.2023    13651    AlexKriulin    9    

87

Как я мониторинг разворачивал

Мониторинг Россия Абонемент ($m)

Статья об опыте развертывания системы мониторинга, сборе и агрегации технологического журнала.

1 стартмани

10.05.2023    15245    andreysidor4uk    49    

146
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. PerlAmutor 129 06.10.23 06:21 Сейчас в теме
Оптимизация запросов динамических списков по больше части задача бесполезная. Смысл есть оптимизировать запрос ДС который выполняется с настройками по умолчанию для новых пользователей на этапе внедрения, а дальше мониторить их запросы - бесполезно.

Причины следующие:
1) Если включен RLS и не используется Производительный РЛС, то что бы вы ни делали, все упирается уже в саму платформу на поведение которой повлиять можно лишь косвенно (переписывание шаблонов RLS, оптимизация ролей, профилей)
2) Если Производительный РЛС все же включен, то на скорость запросов может влиять огромное количество ключей доступа. Тут тоже - переписывать шаблоны или искать компромиссы
3) Обилие настроек отборов, возможность у пользователей выводить дополнительные поля списка в таблицу, группировка строк, упорядочивание, поиск по этим выведенным вручную полям - все это может вести к неоптимальным запросам. Если пользователей начинаешь ограничивать, запрещать это делать и т.д. начинаются жалобы и разборки с руководством. Довод о том, что ДС это не Отчет оказывается неубедительным.

После того как я "получил по шапке" за наложение ограничений на динамических списках - больше этой неблагодарной работой по их оптимизации я не занимаюсь. Сложно всем объяснить, что поиск через Alt+F по началу строки (а лучше по конкретному значению) по индексированным полям работает быстрее, чем поле полнотекстового поиска, которое ищет вообще по всем выведенным колонкам. И то, что упорядочивание по какой-либо из колонок ведет к полному скану таблицы или индекса, т.к. логическая последовательность операций ORDER BY и TOP 45 в большинстве случаев сводится к тому, что сначала ВСЕ записи сортируются и лишь затем от результата берутся эти 45 первых.

Так что пользователи просто запускают поиск, уходят пить чай и получают свой результат (или нет), т.к. у многих почему-то не возникает желания дома на досуге хотя бы почитать про 1С, про то как она работает, какие есть возможности и т.п. Их можно понять, по мнению многих, их "насильно затащили работать в этой программе" и дома есть дела поинтереснее.
mRconik; NIKAMED_IT; kuzyara; mironoff87; +4 Ответить
2. ivanov660 4347 06.10.23 09:21 Сейчас в теме
(1)
1. Ну, если работодатель такой странный, может стоит поискать более адекватных. Сейчас на рынке очень большой спрос на хороших специалистов.
2. Мониторить производительность стоит всегда, во-первых, при разработке конфигураций очень часто пренебрегают хорошим объемом данных, поэтому часто при достижении какой-то критической массы функционал перестает адекватно работать. К сожалению, это очень часто встречающаяся проблема и не только в 1С.
3. Оптимизировать списки с сортировкой также возможно в некоторых случаях.

P.S. Я буду на конференции проводить мастер класс - покажу некоторое количество интересных моментов, так же можем обсудить вопросы проблем производительности. Желающие подходите поговорим о насущных проблемах. Это один из тех моментов, когда можно обсудить лично.
NIKAMED_IT; a_n_d_rey; +2 Ответить
3. ybuuth 33 09.10.23 07:17 Сейчас в теме
(2) , Отличная статья и инструменты, спасибо за публикацию! Жду продолжения
a_n_d_rey; ivanov660; +2 Ответить
Оставьте свое сообщение