Система сбора и анализа информации по производительности работы баз данных, работающих  под связкой «кластер 1С 8.2/8.3 — Microsoft SQL server»







Инструмент в помощь специалисту по производительности sql-серверов с базами 1С.
Программа (c#) собирает наиболее заметные (по времени исполнения, физическим / логическим чтениям / загрузке CPU ) запросы, группирует по обобщенным текстам запросов и контекстам исполнения 1С (если есть), предоставляет информацию в виде отчетов по наиболее заметным запросам и прочей информации (длительные запросы по данным техжурналов, содержимое буферпула в динамике, содержимое клерков памяти, ожидания сервера в разрезе бд, статистика ввода-вывода по файлам баз).

    Идея довольно проста. Берем парсер файлов техжурнала, настраиваем ТЖ на ловлю запросов долее N секунд, данные из парсера заливаем в sql-табличку. Рядом с парсером настраиваем трассировку длительных запросов (долее M секунд) уже со стороны sql-сервера (либо server-side trace sp_trace_create, либо используем eXtended Events) — результат тоже в sql-табличку. Делаем это непрерывно, данные старше 2 недель удаляем.  Две таблички вполне можно связать друг с другом — получим с одной стороны статистику из трасс (Duration, cpu_time, logical_reads, physical_reads, writes), а с другой — контекст исполнения, пользователя в 1С, имя клиентского компа и т.д.  Текст запроса огрубляем.

    Теперь можно анализировать загрузку sql-сервера за период — выявление самых длительных запросов, нагружающих CPU, читающих и т.д.  При этом, выявив "тяжелый" запрос — сразу видим и контекст исполнения, и историю исполнения, а при желании — и текст запроса в терминах конфигурации.

    Далее, к получившейся программе (парсер + трасировщик) добавляем еще и периодический опрос sys.dm_exec_query_stats — и складываем статистику исполнения в третью sql-табличку. Теперь дополнительно добавляется еще и возможность поймать быстрые (быстрее M секунд), но очень массовые запросы, пожирающие время сессий, CPU, генерящие физические и логические чтения.  Также, теперь при просмотре "тяжелых" запросов из предыдущего пункта — можно исхитриться и подсмотреть план исполнения запроса (и в терминах конфигурации тоже).

  Используется все это, как правило, в двух режимах:

1. Анализ активности сервера за длительный период. За две недели, например, последовательно выявляем top 5 наиболее длительных запросов, каждый отдельно рассматриваем — нет ли грубых ошибок (сканы крупных таблиц в планах и т.п.), тормозят ли они живых людей или роботов, можно ли их ускорить, нужно ли их вообще трогать. Если нужно и можно — создаем задачу разработчикам — с детальным описанием проблемы, указанием проблемного контекста и еще прилагаем планы исполнения. Если есть проблемы с загрузкой sql-сервера по CPU — смотрим top 5 наиболее потребляющих CPU запросов (и частенько видим "знакомые все лица" из top 5 длительных) — и обрабатываем их аналогичным образом. Если есть проблемы с памятью на сервере (низкое значение Page Life Expectancy) — есть смысл отработать top 5 по physical reads. Top 5 по logical reads частенько может показать какие-то ошибки разработчиков в запросах (впрочем — может и НЕ показать). Top 5 по записям, бывает, может намекнуть на какую-то лишнюю активность в базах.

2. Расследование проблем. Если известно, что "в пятницу с трех до пяти тормозили базы А, Б и В на сервере С" и выявлено, что "в пятницу с трех до пяти загрузка sql-сервера С по CPU была ~100% " — можно посмотреть первую пятерку запросов по CPU в указанный период. Работает не всегда. Если запрос убил админ — он не попадет в трассу. Тем не менее, данный способ расследования много раз выручал. Само-собой, только данной системы здесь недостаточно — как минимум дополнительно должен быть настроен сбор счетчиков производительности. 

    Также, можно отдельно смотреть таблицу событий техжурнала — выводить top 5 контекстов по времени (тут, увы — только по времени), если были жалобы от МарьИванны — смотреть события от МарьИванны (или от ее компа GLAVBUH001), и т.д. Это ж sql-табличка, какой хотим запрос — такой и напишем..

    Ну и добавим в нашу программу еще несколько полезных штук: будем периодически делать снимки содержимого кеша данных sql-сервера, содержимого клерков памяти, ожиданий сервера, статистики ввода-вывода по файлам баз. 

    Также будем ловить блокировки, как на уровне MS Sql Server, так и управляемые.
 
    Также реализован сбор информации о сеансах базы 1С и ее увязка с трассами длительных запросов.
 

    ВАЖНО. Выдержка из мануала про возможные проблемы:

Посему первым делом предупреждения:
1. Включение технологического журнала 1С на сбор данных по dbmssql  (а также по tlock / tdeadlock / ttimeout )  может привести к тем же переполнениям дисков. А т.к. нынче популярны SSD, размеры которых не поражают величиной – требуется отслеживать свободное место на дисках под сбор данных техжурнала и менять пороги времени (<gt property="duration" value="XXX" />) при необходимости. Вручную.
2. Сбор данных на sql-сервере происходит с помощью Extended Events. Расширенные события, конечно, позиционируются как «легковесные, не требующие много ресурсов», и эксперименты подтверждают, что старым добрым SQL Server Profiler-ом свалить сервер не в пример легче.. Но! У всего есть где-то свой предел, не удивлюсь, что и расширенными событиями можно отправить сервер в нокаут. Значит, обращаться следует как с трассировками: ничего лишнего, ненужное выключаем, пороги по времени задаем разумные, отслеживаем зависшие сессии.
3. Сама бд, которая хранит данные о производительности – получается весьма объемной.  Т.к. хранит тексты запросов и планов исполнения. Изначальная идея «чтоб все влезло в 10 Gb и шло на ноутбуке с ms sql enterprise» почти не работает.. если только задрать настройки. Т.е. придется следить за объемом базы для сбора данных, и корректировать параметры глубины хранения истории (закладка «вспомогательные настройки»)
    Протестированы релизы 8.2.19.80 и 8.3.9.2033 + SQL server 2012 (SP1 и SP3) + SQL server 2024. Теоретически должно работать с любыми релизами 1С, с SQL server 2008, и с SQL server 2024.
 
    Мануал вышел на полсотни страниц.. вообще-то мысль была сделать "кратко на пару листов", но получилось внезапно вот так. Выкинуть чего-либо не поднимается рука. Запускать сборщик без прочтения сего талмуда — категорически не рекомендую.
Так же, рискнувшему запустить требуется знать:
 — как в SQL Server Management Studio выглядят сессии eXtended Events и как их останавливать;
 — что такое техжурнал, и зачем оно надо.
 
—————————
Текущая версия сборщика и комплекта отчетов — 1.2.5.0.
 

Гарантия возврата денег

ООО «Инфостарт» гарантирует Вам 100% возврат оплаты, если программа не соответствует заявленному функционалу из описания. Деньги можно вернуть в полном объеме, если вы заявите об этом в течение 14-ти дней со дня поступления денег на наш счет.

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

Для возврата оплаты просто свяжитесь с нами.

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *