Общие рекомендации. Проблемы производительности

Общие рекомендации. Проблемы производительности

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

Очевидно, что при создании конфигурации 1С:Предприятия, как и при разработке любой системы автоматизации в сфере экономики все решения принимаются как компромисс между удобством работы пользователей, функциональной сложностью конфигурации и быстродействием системы. Причем, при увеличении объемов обрабатываемой информации и количества одновременно работающих пользователей следует внимательнее подходить к оценке необходимости предоставляемых пользователю сервисных функций и искать пути к оптимизации разрабатываемой конфигурации. Заметим, что оптимизация конфигурации далеко не всегда сопровождается снижением уровня сервиса. В этом разделе мы дадим несколько рекомендаций по разработке конфигураций 1С:Предприятия предназначенных для использования с большими объемами данных и в многопользовательском режиме.

Прежде всего, заметим, что работа системы в многопользовательском режиме выполняется медленнее, чем при монопольном запуске. Эта разница существенна для версии, работающей с базой данных в формате DBF. Замедление работы системы объясняется тем, что механизм работы с базой данных учитывает возможные изменения данных другими пользователями. В связи с этим в производительности многих режимов, например, формировании отчетов или заполнении документов, при многопользовательской работе более существенную роль начинает играть именно доступ к данным, а не отработка алгоритмов встроенного языка. То есть при проектировании конфигурации, 

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

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

Интерактивные и пакетные режимы

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

Предоставляемые средства системы 1C:Предприятие ориентированы на то, чтобы интерактивные режимы работали с приемлемой производительностью при любых объемах данных. Этим объясняется, например, отсутствие возможностей просмотра журналов документов и списков справочников с произвольным фильтром по некоторому условию, так как эти режимы просматривают данные непосредственно в информационной базе, без предварительной выборки. Предоставленные возможности отборов в журналах документов опираются на специальные механизмы, позволяющие просматривать документы интерактивно с определенной выборкой. Однако заметим, что чем больше обычно объем информационной базы в экономической системе, тем меньше предусматривается режимов динамического просмотра информации.

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

Использование "длинных путей"

При написании модулей следует избегать многократного обращения к данным агрегатных объектов с использованием "длинных путей", то есть через две точки и более. Примером такого обращения может являться получение цены товара документа:

ЦенаТовара=Накл.Товар.Цена;

Если такое обращение выполняется многократно (например, в цикле) или выполняется обращение к нескольким атрибутам и методам одного атрибута агрегатного объекта, то целесообразно вначале запомнить атрибут в переменную, а затем использовать запомненное значение. Например:

Тов=Накл.Товар.Цена;

ЦенаТовара=Тов.Цена;

Это объясняется тем, что при обращении к атрибуту объекта, если атрибут имеет тип "документ", "справочник" или "счет", то выполняется поиск объекта в информационной базе. Если такое обращение происходит многократно, то поиск выполняется каждый раз. Если выполняется обращение к одной и той же к запомненной переменной, то поиска в информационной базе не происходит.

Использование длинных строк в индексируемых данных

При включении различных признаков в метаданных система может создавать и затем поддерживать в информационной базе различные индексы. Прежде всего, индексы создаются для кода и наименования справочника, а также для номера документа. Индексы создаются при включении сортировки или отборов в справочниках, при включении отборов у общих реквизитов документов, а также измерений и реквизитов регистра. Кроме того, индексы автоматически создаются для реквизита проводки выбранного в качестве разделителя учета. Не рекомендуется в таких данных использовать строки большой длины. При большом объеме данных поддержание индексов по длинным строкам существенно сказывается на производительности системы.

При большом объеме справочника можно рекомендовать ограничить наименование справочника 30 символами, а полное наименование записывать в отдельный реквизит. Для реквизитов, по которым устанавливается отбор и для разделителя учета не рекомендуется использовать строки больше 20 символов.

Использование преобразований типов во встроенном языке

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

Приведем пример. Необходимо выполнить некоторые действия в модуле для непустых значений атрибута или переменной типа справочник. Иногда для этого используется проверка типа:

Если ПустаяСтрока(Запрос.Товар)=1 Тогда

…

или

Если СокрЛП(Запрос.Товар)="" Тогда

…

При таком выполнении проверки на самом деле программа сначала выполняет преобразование значения типа "Справочник" к типу "Строка", а затем уже обрабатывает полученный результат. При преобразовании к строковому типа значения типа "Справочник" выполняется поиск значения в информационной базе для получения его представления (наименования или кода). Если этот алгоритм работает в цикле с большим объемом значений, то суммарные издержки такого способа проверки могут быть достаточно велики.

Для проверки такого значения следует использовать функцию "ПустоеЗначение", которое выполнит проверку без считывания данных элемента справочника.

Если ПустоеЗначение (Запрос.Товар)=1 Тогда

…

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

Определение производительности конфигурации

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

Разумеется, идеальным способом измерения производительности является тестирование конфигурации непосредственно в процессе работы пользователей. Однако, конфигурирование (отладка) часто выполняется на тестовой информационной базе или в нерабочее время. В этом случае при выполнении замеров производительности необходимо правильно воссоздать реальные условия работы системы. В противном случае соотношения временных затрат на различные операции может абсолютно не соответствовать "боевым" условиям. Прежде всего, необходимо, чтобы информационная база располагалась на сервере локальной сети, а не на той же машине, на которой выполняется программа. Разумеется, формат хранения (DBF/CDX или SQL) тестовой базы

должен совпадать с форматом хранения "боевой" информационной базы. Желательно, чтобы по характеристикам сервер и локальная сеть были теми же, что и при работе пользователей или аналогичными. Запуск программы должен производиться не в монопольном режиме, так как монопольный режим существенно отличается по производительности от разделенного. Кроме того, при работе с базами данных в формате (DBF/CDX), следует выполнять дополнительный запуск программы с той же информационной базой с другого компьютера, так как отсутствие второго соединения позволяет системе оптимизировать доступ к данным. Наконец для более полной имитации можно рекомендовать на втором компьютере запустить длительный отчет, который будет имитировать нагрузку пользователей или обработку, выполняющую в цикле запись некоторых данных в информационную базу. При таком наборе условий производимые замеры будет приближены к реальным условиям, и позволят получить адекватную оценку соотношения длительности различных операций.

Собственно для определения узких мест с точки зрения производительности рекомендуется, прежде всего, использовать механизм "Замер производительности" (в режиме запуска "Отладчик"). Данный механизм позволяет получить соотношение временных затрат на выполнение отдельных строк алгоритма модуля.

Заметим, что основные проблемы, связанные с производительностью, возникают при многопользовательской работе с большими объемами данных. Причем основные затраты времени приходятся именно на доступ к данным информационной базы. Поэтому, очевидно, что при анализе результатов замера производительности, прежде всего, будут выделяться обращения к данным. Для того, чтобы лучше выделить эти операции можно рекомендовать отключать флажок "Для вызовов процедур и функций включать время выполнения". Это позволит получить чистое время выполнения различных методов объектов встроенного языка 1С:Предприятия. По результатам проведенного замера следует предпринимать меры к оптимизации алгоритмов. Механизм "Замер производительности" предоставляет возможность сохранения результата замера, что позволяет после внесения изменений в конфигурацию выполнить повторный замер и сравнить с предыдущим для оценки эффективности сделанных изменений.