Статьи
Оптимизация производительности прикладных решений
Благодаря масштабируемости решений на платформе 1С:Предприятие 8 появилась возможность комплексной автоматизации больших организаций. Основной проблемой подобных внедрений остается оптимизирование производительности прикладных решений. В данной статьи описаны лишь некоторые способы и методы, позволяющие существенно сократить время на обработку данных и при этом разгрузить вычислительные ресурсы, позволяя организовать работу большого числа пользователей с внушительными объемами данных.
- При оптимизации прикладного решения с точки зрения параллельности работы пользователей следует понимать, что пропускная способность системы уменьшается, когда увеличивается продолжительность и количество блокировок, накладываемых на данные. Это происходит при модификации каких-либо данных. Таким образом «узким местом» системы становятся те документы, регистры и справочники, которые пользователи чаще всего используют. Именно по этому стоит разделять данные не только для решений задач предметной области, но и для оптимизации запросов к наиболее часто используемым данным.
- Главной особенностью получения информации из базы данных, является то, что при этом блокируются не те записи, которые он возвращает запрос, а те, которые он обработал при обращении к базе данных. Поэтому основная опасность отсутствия подходящих индексов заключается в том, что в этом случае будут блокироваться избыточные записи, так как из за отсутствия индекса запрос вынужден обрабатывать диапазон записей больший, чем следует, и затем перебирать их, выбирая нужные. Поэтому надо проанализировать используемые запросы и убедиться, что структура регистров и варианты индексирования, указанные для реквизитов, соответствуют условиям используемых запросов.
- Следует избегать ситуаций, при которых регистр может оказаться пустым, но задействованного в логике оперативного режима работы. Пустой регистр – потенциальный источник избыточной блокировки, так как при обращении к записям этого регистра будет блокироваться вся таблица этого регистра.
- Если в этом нет специальной прикладной необходимости, не следует выполнять запись движений регистра в явном виде (с использованием метода Записать() набора записей регистра) в обработке проведения. Все наборы записей движений, модифицированные на момент записи документа, будут записаны автоматически при выходе из обработчика проведения.
- Не следует получать поле Ссылка через точку от другого поля, так как при этом будет создаваться дополнительное соединение, которое замедлит выполнение запроса.
Пример не оптимального кода:
Выбрать |РасходнаяНакладная.Дата, |РасходнаяНакладная.Номер |Из |Документ. РасходнаяНакладная КАК РасходнаяНакладная |ГДЕ |РасходнаяНакладная.Контрагент.Ссылка = &Контрагент
В результате будет создано совершенно ненужное в данном случае соединение с таблицей «Контрагенты», и как следствие, выполнение запроса замедлится. Такой запрос следует переписать следующим образом:
Выбрать |РасходнаяНакладная.Дата, |РасходнаяНакладная.Номер |Из |Документ. РасходнаяНакладная КАК РасходнаяНакладная |ГДЕ |РасходнаяНакладная.Контрагент = &Контрагент