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

Публикация № 712722

Администрирование - Производительность и оптимизация (HighLoad)

анализ производительности узкие места sql-сервер тяжелые запросы

Инструмент в помощь специалисту по производительности 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 2016. Теоретически должно работать с любыми релизами 1С, с SQL server 2008, и с SQL server 2017.
 
    Мануал вышел на полсотни страниц.. вообще-то мысль была сделать "кратко на пару листов", но получилось внезапно вот так. Выкинуть чего-либо не поднимается рука. Запускать сборщик без прочтения сего талмуда - категорически не рекомендую.
Так же, рискнувшему запустить требуется знать:
 - как в SQL Server Management Studio выглядят сессии eXtended Events и как их останавливать;
 - что такое техжурнал, и зачем оно надо.
 
--------------------------
Текущая версия сборщика и комплекта отчетов - 1.2.5.0.
 

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

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

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

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

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. Darklight 22 12.12.17 14:27 Сейчас в теме
Хорошая вещь. Сам давно уже хотел сделать нечто подобное. Но, несколько более универсальное с чуть большими возможностями по сбору данных (в т.ч. счётчиков, в т.ч. генерирующее свои собственные счётчики), с компактной упаковкой а таблицы SQL и с WEB-доступом. На кросплатформенном .NET Core. В Качестве локального сервиса/демона. Без отправки чего-либо куда-либо (кроме почтовых рассылок отчётов и инфорормирования в месенджер об авариях).
4. Техподдержка 26.12.17 10:07
(1) Как показывает практика - главное начать :)
3. DarkAn 937 25.12.17 11:02 Сейчас в теме
Word 2010 мануал открывает с проблемами :( - картинки не видит
а 6 картинок - есть (слайд 2)
Прикрепленные файлы:
5. Техподдержка 26.12.17 10:09
(3) Попробую чуть позже выложить копию мануала в формате Word-а.
6. palsergeich 05.02.18 14:10 Сейчас в теме
7. VVi3ard 50 07.02.18 15:07 Сейчас в теме
На мой взгляд хватило бы контекста 1С и актуальных планов исполнения, там уже есть текст запроса, есть данные как по Estimated так и по Actual. При этом схема отлично ложится в колонку с типом XML.
Информация о контексте позволит найти сам текст запроса на языке 1С что бы понять откуда запрос.

Основная проблема для меня это понять как собирать актуальные планы только для тех запросов которые выполняются больше N секунд.
т.к. вариант "Собирать все планы" и отсеивать из собранных не нужные - значительно нагружает SQL сервер.

Интересно было бы почитать именно про:
"Также, теоретически имеется возможность ловить реальные (действительные, actual) планы исполнения запросов, длившихся долее N секунд."
Хотя бы на уровне идеи.
8. astratek 2 13.03.19 16:59 Сейчас в теме
>>Текущая версия работоспособна до 01.01.2019, потом прекратит работать. К этому моменту или появится новая версия, или .. или не появится.
На дворе 2019 год, как обстоят дела с обновлением ?
9. Техподдержка 16.03.19 15:12
Новая версия, с ловлей блокировок управляемых и автоматических, и со сбором показаний консоли серверов - готова.
Хотел написать пару новых статей, да начать продавать.
Неясно, однако: какую цену назначать, как защищать от распространения и защищать ли, как обеспечить техподдержку.
И вообще - стоит ли оно усилий.
Посему пребываю пока в некоем творческом ступоре.
Оставьте свое сообщение

См. также

Свертка базы SQL + Альтернативный контроль удаления помеченных Промо

Свертка базы Чистка базы Производительность и оптимизация (HighLoad) v8 1cv8.cf Платные (руб)

Свертка базы 1с 8.1, 8.2, 8.3 (может использовать прямые запросы к MSSQL, PostgreSQL). Сворачивает документы, регистры накопления, сведений, бухгалтерии (но не регистры расчета). Универсальна, подойдет к любой конфигурации (обратите внимание на известные ограничения). Включает в себя нестандартный быстрый контроль удаления помеченных объектов и удаление помеченных объектов прямыми запросами. Поставляется с исходными кодами.

6500 руб.

13.06.2012    71769    72    97    

Оптимизация поиска в списках через Elasticsearch

Поиск данных Производительность и оптимизация (HighLoad) v8 ERP2 БП3.0 УТ11 КА2 Россия Платные (руб)

Расширение для ускорения поиска по спискам справочников или документов.

10000 руб.

04.02.2020    2633    1    0    

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

Журнал регистрации Статистика базы данных Производительность и оптимизация (HighLoad) Администрирование СУБД Технологический журнал v8 Платные (руб)

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

7500 руб.

28.08.2019    7980    4    2    

Ловля блокировок на связке "Microsoft SQL server - 1С"

Производительность и оптимизация (HighLoad) v8 v8::blocking Бесплатно (free)

Материал относится к базам данных на связке «1С - MS SQL Server». Один из способов отлова блокировок в бд 1С . Переход к управляемым блокировкам через режим "Автоматический и управляемый".

16.07.2019    9054    0    fhqhelp    0    

Онлайн-курс "Подготовка к экзамену 1С:Эксперт и 1С:Профессионал по технологическим вопросам" с 21 июля по 7 августа 2020 г. Промо

Производительность и оптимизация (HighLoad) Решение задач на 1С:Специалист v8 Платные (руб)

На курсе вы получите практические навыки решения задач производительности 1С, в том числе характерных для высоконагруженных информационных систем (более 1000 пользователей). Подготовка к экзамену – только одна из составляющих курса. 70% слушателей приходят за знаниями, которые позволят расти и зарабатывать, делать сложные задачи на крупных проектах.

16450 руб.

30.05.2018    54893    76    10    

Мониторинг SQL Server с помощью Extended Events (и не только) для 1С. Как держать руку на пульсе?

Производительность и оптимизация (HighLoad) Бесплатно (free)

Что и как мониторить в работе SQL Server, чтобы держать Вашу систему в форме.

05.05.2019    31261    0    YPermitin    23    

Ожидания RESOURCE_SEMAPHORE и RESOURCE_SEMAPHORE_QUERY_COMPILE – внешние проявления, и как с ними бороться

Производительность и оптимизация (HighLoad) Россия Бесплатно (free)

Рассматривается один из типов массовых проблем в рабочих базах на связке «1С - MS SQL Server».

03.03.2018    13761    0    fhqhelp    8    

Неоптимальности вида «план исполнения запроса "испортился"» - поиск и исправление

Производительность и оптимизация (HighLoad) v8 Бесплатно (free)

Рассматривается один из частых типов проблем в рабочих базах (второй после блокировок, пожалуй... впрочем, часто и тесно с ними связанный). Материал относится к базам данных на связке «1С - MS SQL Server».

05.02.2018    16302    0    fhqhelp    20    

Многопоточность. Универсальный «Менеджер потоков» 2.1 Промо

Производительность и оптимизация (HighLoad) Инструментарий разработчика Математика и алгоритмы Универсальные функции v8 1cv8.cf Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

3000 руб.

07.02.2018    72921    177    52    

Пример поиска неоптимальности при загрузке SQL-сервера по CPU на 100%

Производительность и оптимизация (HighLoad) v8 1cv8.cf Россия Бесплатно (free)

Вечер пятницы, ничто не предвещало.. Звонок из техподдержки: "центральная база розничной сети лежит". Далее расследование причин.

23.12.2017    18583    0    fhqhelp    32    

Подсистема "Настройка контроля заполнения объектов в момент записи 3.1.3" для 1С: Предприятия 8.1 / 8.2

Производительность и оптимизация (HighLoad) v8 1cv8.cf Россия Платные (руб)

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

1000 руб.

24.10.2009    24195    0    98    

Оптимизация запросов 1С - от теории к практике Промо

Производительность и оптимизация (HighLoad) Практика программирования Математика и алгоритмы v8 1cv8.cf Платные (руб)

Желаете повысить свой уровень разработки? Не знаете, как оптимизировать работу тяжелых запросов 1С? Или знаете методы оптимизации, но на практике не получаете результат? Тогда эта интерактивная обучающая программа для Вас! Оптимизация запросов прямо в программе 1С:Предприятие 8. Несколько десятков практических заданий, рассматривающих методы оптимизации на практике. От Вас требуются реальные решения - оптимизация представленных запросов. Автоматизированная система оценит Ваш запрос и представит результат проверки.

1500 руб.

06.07.2015    55761    77    4