Анализ кода, потребляющего ресурсы СУБД MS SQL, контекстами 1С

21.04.22

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

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

Анализ метрик СУБД


Кейс 1

Проблема:

Падение нескольких ключевых операций.

Решение:

В метриках инфраструктуры видим большое потребление ЦПУ.

Проверяем потребление ЦПУ, видим в т.ч. "большой" отчет.

Возврат отчетом от 10 тыс. строк и выше намекает о целесообразности проанализировать отчет и наложение отборов.

На практике пользователи забывают ставить отборы, в этом случае помогает запрет на формирование без отборов или программный сброс подобных сеансов.

 

 

 

Кейс 2

Проблема:

Падение конкретной ключевой операции.

Решение:

Смотрим, какие контексты были в это время, сколько и каких ресурсов потребляли.

Видим большое количество возвращаемых запросом строк.

Узнаем у пользователя, зачем ему столько, понимаем, что не указал отборы.

 

 

 

 

Кейс 3

Проблема:

Количественная оценка оптимизации

Решение:

Фиксация изменений до и после выполненных работ.

 

 

 

 

Кейс 4

Проблема:

Падение большого количества ключевых операций.

Решение:

При одной большой транзакции найти виновника легко.

При наличии множества транзакций выявить причину становится сложнее.

 

 

По многим КО произошла сработка

 

В инфраструктуре тоже видны несколько проблем, но обратим внимание на большую активность ленивого писателя (подробнее о нем SQL Server CHECKPOINT, Lazy Writer, Eager Writer and Dirty Pages in SQL Server). Предполагаем, что одна из операций вымывает кэш, что приводит к удлинению транзакций из-за физических чтений.


 

Смотрим, кто активно использует память, обращаем внимание на физические чтения других сессий.

 

 

Находим пользователя, смотрим, что он делает.

Смотрим корреляцию работы КО этого пользователя с остальными КО.

 

 

Понимаем что выполнение пользователем работы повлияло на остальных. 
Анализируем запросы выполняемые этим пользователем. Оптимизируем.

 

Кейс 5

Проблема:

Не отработала дефрагментация индексов

Решение:

Смотрим на дедлоки СУБД

 

Идем в лог, видим дедлок.
Смотрим дедлоки.
Видим сброс выполнения процесса process51104aeca8 выполняющего EXECUTE dbo.IndexOptimize.
Там же видим что выполнял в это время второй процесс 
UPDATE T1 SET _Fld6876 = T1._Fld6876 + -@P1 ... FROM dbo._AccumRgT6878 T1 WHERE T1._Period = @P3 AND ...
Есть сессии СУБД (spid, spid2) по ним можно посмотреть контекст в ТЖ.

 

Немного о сборе данных


Статьи на ИТС по анализу проблем производительности на СУБД

предполагают запуск запросов и сбор информации в момент проблемы.

В одном случае анализируется длительное выполнение запросов, во втором обращения к диску.

В обоих случаях выявление проблемы происходит во время ее появления.

Что делать если проблема уже прошла и необходимо предотвратить ее появление в будущем?

Нужно фиксировать профиль нагрузки постоянно. 

Сделать это можно 2 путями:

  1. Сбор данных с сервера СУБД через определенные временные промежутки (например каждые 10 секунд, )
  2. Отслеживание активности системы с помощью расширенных событий

 

Рассмотрим подробнее плюсы и минусы каждого метода

Сбор данных с сервера СУБД через определенные временные промежутки (например каждые 10 секунд)

Плюсы

Срез текущего состояния в моменте

Минусы

Запросы, выполняемые менее определенного промежутка, в сборке не фиксируются (например, при сборе каждые 10 секунд запросы по 1-9 секунд не попадут).

При этом множество подобных неоптимальных запросов может потреблять много ресурсов (например, скан индекса 10000 запросов длительностью по 5 секунд может дать нагрузку до 100% на проц, выявить подобную проблему собирая каждые 10 секунд данные будет трудно).

Более длительные запросы фиксируются, но тоже есть нюансы.

Например, запрос выполняется 40 секунд, сколько раз он зафиксируется при сборе каждые 10 секунд? Несколько. Надо будет убирать дубли для непротиворечивости данных.

Сбор данных через расширенные события

Плюсы

События фиксируются только после выполнения по подходящим условиям отбора.

Фиксируются независимо от времени выполнения.

Отсутствуют дубли.

Минусы

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

 

Для расследования текущих проблем до их отражения в расширенных событиях подходит сбор данных запросом.

Для анализа прошедших проблем подходят расширенные события

 

Фиксируемые показатели через расширенные события:

  • Количество выполнений
  • Суммарная длительность выполнения 
  • Суммарное потребление ЦПУ
  • Суммарно физические чтения
  • Суммарно логические чтения
  • Суммарно записи
  • Суммарно количество строк возвращенных запросами

Фиксируемые показатели собираемые через интервалы запросами:

  • Потребление памяти
  • Размер запрошенной памяти
  • Ожидания по запросу 
  • Блокирующая сессия
  • Использование временных таблиц
  • Физические чтения
  • Логические чтения
  • Записи

дают понимание текущей нагрузки на диски, временные таблицы, ЦПУ.

Это понадобится для более точного определения узких мест и работы над ними.

 

Собрали данные на СУБД.

Документация сбора расширенных метрик с MS SQL поможет забрать их с сервера.

Контексты 1С собираем через ТЖ.

Как пример сбора ТЖ можно написать сервис, работающий независимо и переваривающий логи почти в режиме реального времени (журнал регистрации в эластике с использованием службы без использования 1С (.net + elastic) как пример, но по журналу регистрации) или взять готовый, например парсер технологического журнала (golang + redis + elasticsearch).

Для соединения контекстов СУБД с контекстами 1С можно сделать отдельный сервис на любом любимом языке.

 

Заключение
 

Метрики СУБД позволяют более точно определять воздействие кода на сервер.

См. также

HighLoad оптимизация Технологический журнал Системный администратор Программист Бесплатно (free)

Обсудим поиск и разбор причин длительных серверных вызовов CALL, SCALL.

24.06.2024    5449    ivanov660    12    

56

HighLoad оптимизация Программист Платформа 1С v8.3 Бесплатно (free)

Метод очень медленно работает, когда параметр приемник содержит намного меньше свойств, чем источник.

06.06.2024    9632    Evg-Lylyk    61    

44

HighLoad оптимизация Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Анализ простого плана запроса. Оптимизация нагрузки на ЦП сервера СУБД используя типовые индексы.

13.03.2024    5251    spyke    28    

49

HighLoad оптимизация Программист Платформа 1С v8.3 Бесплатно (free)

Оказывается, в типовых конфигурациях 1С есть, что улучшить!

13.03.2024    7797    vasilev2015    20    

42

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

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

2 стартмани

15.02.2024    12723    256    ZAOSTG    84    

115

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

Принимать, хранить и анализировать показания счетчиков (метрики) в базе 1С? Почему бы нет? Но это решение быстро привело к проблемам с производительностью при попытках построить какую-то более-менее сложную аналитику. Переход на PostgresSQL только временно решил проблему, т.к. количество записей уже исчислялось десятками миллионов и что-то сложное вычислить на таких объемах за разумное время становилось все сложнее. Кое-что уже практически невозможно. А что будет с производительностью через пару лет - представить страшно. Надо что-то предпринимать! В этой статье поделюсь своим первым опытом применения СУБД Clickhouse от Яндекс. Как работает, что может, как на нее планирую (если планирую) переходить, сравнение скорости работы, оценка производительности через пару лет, пример работы из 1С. Все это приправлено текстами запросов, кодом, алгоритмами выполненных действий и преподнесено вам для ознакомления в этой статье.

1 стартмани

24.01.2024    5890    glassman    19    

42

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

Встал вопрос: как быстро удалить строки из ТЗ? Рассмотрел пять вариантов реализации этой задачи. Сравнил их друг с другом на разных объёмах данных с разным процентом удаляемых строк. Также сравнил с выгрузкой с отбором по структуре.

09.01.2024    15018    doom2good    49    

71
Оставьте свое сообщение