Андрей Луконькин
Анализируем производительность «1С:Предприятие»
Краткий обзор специализированной конфигурации
При одновременной работе с базами данных «1С:Предприятие» большого количества пользователей неизбежно возникает проблема конфликта блокировок, приводящая к снижению производительности в целом. Рассмотрим новый инструмент, позволяющий анализировать текущую производительность многопользовательской системы – конфигурацию «1С:Центр управления производительностью».
В начале нужно понять, что же «мешает» базе быстро работать, что делает её эксплуатацию менее удобной. Под блокировками понимается ограничение доступа к некоторому ресурсу при работе базы в многопользовательском режиме.
Конфликт блокировок – это ситуация, которая приводит к тому, что один из двух конкурирующих процессов ставится в очередь, что вызывает замедление работы системы, а в некоторых случаях может привести к ошибке «lock timeout» или «deadlock».
Система блокировок MS SQL Server является одним из важнейших механизмов обеспечения целостности данных информационной базы в многопользовательском режиме работы. Но, с другой стороны, она же значительно замедляет работу, а удовлетворительная скорость работы пользователей с базой данных – одно из важнейших условий функционирования системы.
С использованием конфигурации «1С:Центр управления производительностью» («1С:ЦУП») версии 1.0 (бета) можно увидеть проблемы производительности и узнать, можно ли что-нибудь сделать для её увеличения.
Приведу основные возможности «1С:ЦУП»:
- Мониторинг показателей производительности работающей системы:
- визуальная оценка текущего состояния системы в реальном времени;
- запись и хранение исторической информации о производительности системы;
- анализ сохраненных данных за произвольный период времени.
- Анализ проблем производительности системы:
- сбор подробной технической информации об основных проблемах производительности, имеющихся в системе;
- автоматическое получение полного контекста каждой проблемы на всех уровнях функционирования приложения;
- действия пользователей, которые привели к возникновению данной проблемы;
- стек вызовов строк кода конфигурации, в результате работы которых возникла проблема;
- выполнение запросов к СУБД, в результате которых проявилась данная проблема;
- автоматическое ранжирование всех имеющихся проблем по степени важности;
- рассмотрение проблем по убыванию влияния на общую производительность системы.
Ввиду того что это бета-версия конфигурации и распространяется она бесплатно (http://users.v8.1c.ru, в разделе для пользователей), существует ряд ограничений:
- бета-версия «1С:ЦУП» совместима с платформой «1С:Предприятие» версии не ниже 8.1.10;
- бета-версия может подключаться для исследования производительности и анализа информации о взаимоблокировках только к информационным базам, работающим с использованием СУБД MS SQL Server 2005.
«1С:ЦУП» может работать в двух режимах – мониторинга и просмотра.
Режим мониторинга подразумевает подключение в режиме «online» к исследуемой базе и предназначен для отслеживания текущих значений выбранных показателей производительности, включения/выключения записи текущих значений показателей производительности.
Режим просмотра не требует подключения к исследуемой базе и используется для просмотра сохраненных значений показателей за любой период и анализа технической информации об имеющихся проблемах производительности.
Расмотрим режимы подробнее.
Рисунок 1. Мониторинг текущих значений выбранных показателей производительности
Работа в режиме мониторинга
Основная форма мониторинга значений показателей производительности состоит из двух взаимосвязанных областей:
- текущие значения показателей производительности (см. рис. 1);
- список выбранных показателей производительности.
В верхней области текущих значений показателей данные отображаются графически, 60 последних значений – с частотой, заданной в настройках (по умолчанию 3 секунды).
В нижней области задаётся список показателей, по которым мы хотим отслеживать производительность. Администратор может добавлять или удалять тот или иной показатель, а также настраивать параметры отображения в верхней части экрана (оформление, масштаб).
При включенной опции «Запись» данные будут сохраняться для возможности анализа и дальнейшей оптимизации кода конфигурации и структуры метаданных.
Работа в режиме просмотра
Режим просмотра работает с той информацией, которая была записана в режиме мониторинга.
Просмотр можно осуществлять за любой интервал времени, при этом можно масштабировать просматриваемые данные, управляя таким образом интервалом, который будет умещаться на один экран просмотра.
При нажатии на кнопку «Анализ» в режиме просмотра информации становится доступным анализ данных.
«1С:ЦУП» позволяет анализировать подробную техническую информацию о следующих проблемах производительности:
- медленная работа запросов к СУБД;
- ожидания на блокировках СУБД – простои системы из-за ожиданий на блокировках данных на уровне СУБД;
- взаимоблокировки данных – неразрешимые конфликты блокировок.
Аналитическая информация о проблемах производительности дается в двух независимых разрезах: по коду конфигурации и по объектам метаданных.
Таким образом, становится возможным увидеть конкретную строку программы, из-за которой возникает множество проблем, связанных с производительностью, и которую нужно оптимизировать или создать новый алгоритм для работы фрагмента программы (см. рис. 2).
Рисунок 2. Дерево анализа проблем в разрезе кода конфигурации
Строка кода (или объект метаданных), оказывающая наибольшее воздействие на производительность, находится вверху списка. Другие проблемы располагаются по уменьшению степени влияния на систему.
Далее в зависимости от проблемы мы можем проводить анализ или длительных запросов, или ожиданий на блокировках, либо анализ взаимоблокировок, самых критичных и неразрешимых конфликтов блокировок.
При обнаружении длительных запросов необходимо повторить ситуацию возникновения проблемы, получить текст запроса на встроенном языке «1С» и провести его анализ.
Типичные причины неоптимальной работы запросов:
- несоответствие индексов и условий запроса;
- некорректное использование параметров виртуальных таблиц;
- отсутствие функции ВЫРАЗИТЬ для полей составного типа;
- большая вложенность подзапросов, соединения с вложенными подзапросами;
- получение лишних полей через точку.
Ожидания на блокировках возникают в случае неоптимальной работы запроса, в случае методической ошибке при использовании объектов метаданных или из-за особенностей работы СУБД.
И, наконец, самые проблемные конфликты – взаимоблокировки, образующие замкнутый круг ожиданий на блокировках. В этом случае пользователи получают сообщение об ошибке, и выполняемое ими действие прерывается. Любую взаимоблокировку следует считать ошибкой проектирования и программирования системы.
Причины возникновения блокировок данного вида могут быть двух типов:
- Неблокирующее чтение в начале транзакции и запись этих же данных в конце транзакции. Для исправления такой взаимоблокировки необходимо сделать чтение блокирующим (запрос с опцией «ДЛЯ ИЗМЕНЕНИЯ»).
- Захват ресурсов в разном порядке – два или более процесса захватывают одни и те же ресурсы в разном порядке. Необходимо изменить код конфигурации таким образом, чтобы ресурсы захватывались в одинаковом порядке.
В качестве заключения могу сказать, что использование данной разработки, которая появилась совсем недавно и имеет огромные перспективы, очень сильно помогло при анализе проблем производительности при одновременной работе более 100 пользователей в конфигурации УПП на платформе «1С:Предприятие 8.1». Если раньше при возникновении трудностей с производительностью пользователи ждали или перезапускали процессы по несколько раз, то теперь есть возможность оперативно решать многие проблемы, анализируя их источник.
Удачи!
Приложение
Устанавливать ли программу или просто скопировать папку запуска?
Известно, что «1С:Предприятие 8» может запускаться, даже если платформа не была установлена, а всего лишь скопированы исполняемые файлы или произведен запуск с сетевого ресурса. Возникает закономерный вопрос: «А нужно ли устанавливать, если и так хорошо работает?» Скопировав папку, содержащую исполняемые файлы и необходимые для работы библиотеки (например C:\Program Files\1cv81\bin), мы сможем пользоваться программой, но при этом теряем некоторую часть функционала.
Кроме непосредственного копирования программа локальной установки производит еще и следующие действия:
- создает файлы с расширением .res и устанавливает сопроводительные файлы, соответствующие выбранному основному языку интерфейса;
- регистрирует «1С:Предприятие 8» как сервер COM-соединения и automation-сервер;
- при установке сервера «1С:Предприятие 8» производит регистрацию и настройку сервера в COM+ и создает специального пользователя для этого сервера;
- регистрирует «1С:Предприятие 8» как установленное, что позволяет управлять набором необходимых компонентов через панель «Установка и удаление программ».
Копирование исполняемых файлов «1С:Предприятие» может понадобиться в случае необходимости запуска на одном компьютере различных релизов платформы (в основном это бывает нужно разработчикам).
В остальных же случаях рекомендуется производить корректную установку программы во избежание ошибок в работе. Не поленитесь запустить setup.exe, и тогда не возникнет ситуаций, когда конфигурация или внешняя обработка не смогут выполнить свои функции.