Улучшаем производительность 1С. Рекомендации

08.09.20

База данных - HighLoad оптимизация

Каждый уважаемый разработчик 1С сталкивался или столкнется с вопросом производительности высоконагруженных систем. В статье агрегирован основной набор рекомендаций, который позволит повысить производительность системы. Эти рекомендации должны быть просто must have по определению.

Введение

В ходе исследований проблем производительности систем 1С, решил изложить тезисно основные рекомендации, наблюдения, идеи.Так называемый чек-лист, который поможет вам улучшить характеристики производительности вашей системы. А если они уже используются, то еще раз проверить все по пунктам, поскольку при некоторых действиях они могут отключаться. В статье рассматриваются только настройки для СУБД MS SQL Server и ОС Windows Server.

Итак.

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

  1. Включаем на сервере СУБД уровни изоляции транзакций ALLOW_SNAPSHOT_ISOLATION и READ_COMMITTED_SNAPSHOT

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

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

             ALTER DATABASE НаименованиеБазы
             SET ALLOW_SNAPSHOT_ISOLATION ON

             ALTER DATABASE НаименованиеБазы
             SET READ_COMMITTED_SNAPSHOT ON

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

  1. Устраняем эскалацию (укрупнение) блокировок

Для устранения большей части избыточных блокировок на СУБД, связанных с эскалацией, можно попробовать использовать такие методы:

  • Установить в настройках СУБД параметр LOCKS, вместо 0.

Когда параметр locks установлен в 0, укрупнение блокировки происходит тогда, когда память, используемая текущими структурами блокировки, достигает 40 процентов от пула памяти компонента Компонент Database Engine . Если параметр locks установлен не в значение 0, укрупнение блокировки происходит, когда количество блокировок достигает 40 процентов от значения, указанного для параметра locks.

  • Включить на сервере СУБД флаг трассировки 1224

Включить можно так:

               DBCC TRACEON (1224,-1)

Этот флаг отключает укрупнение блокировок на основе количества блокировок. Стоит отметить, что чересчур активное использование памяти может включить укрупнение блокировок обратно.

  • Ищем документы, которые делают более 10000 записей в 1 регистр за 1 раз.

Если при выполнении одной транзакции записывается более 10000 записей в регистр, тогда это приводит к блокировкам этих регистров полностью (эскалации) и нарушает параллельную работу всех пользователей, которые обращаются к данным этих регистров, в момент выполнения этой транзакции.  Для устранения проблем с конфликтами блокировок и избыточными ожиданиями, которые возникают в процессе выполнения таких длительных транзакций, необходимо реализовать в коде конфигурации механизм, который будет фиксировать транзакцию с  количеством записей, не более чем по 10000 записей за один раз, для исключения эскалации блокировок на сервере 1С и СУБД. В результате такого механизма, будет существенно повышена параллельность работы  пользователей во всей информационной базе. Особенно с операциями, которые используют те же регистры.

  1. Повышаем производительность процессора на сервере приложений 1С 

    Производительность сервера «1С:Предприятие» зависит в большей степени от частоты процессора и частоты памяти. Чтобы повысить производительность текущих процессоров, стоит включить режим Turbo Boost. Необходимо зайти в BIOS сервера, и выключить там пункты, в названии которых есть EIST и C1E. Взамен надо там же найти пункты, связанные с процессором, в названии которых есть Turbo Boost, Intel SpeedStep и включить эти пункты. Если в BIOS есть общее указание режима энергосбережения — включить его в режим максимальной производительности («агрессивный»).
  2. Большие таблицы

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

   6. Состояние итогов регистров

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

Пересчет текущих итогов можно осуществлять следующими способами:

  • С помощью соответствующего пункта  «Тестирование и исправление информационной базы»  в конфигураторе.

  • С помощью команды ПересчитатьТекущиеИтоги()  встроенного языка для нужных регистров ( в том числе возможна реализация пересчета итогов одновременно по нескольким регистрам и с помощью фоновых или регламентных  заданий )

Оптимизация СУБД

См. также

Оптимизация нагрузки на ЦП сервера СУБД используя типовые индексы

HighLoad оптимизация Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Анализ простого плана запроса. Оптимизация нагрузки на ЦП сервера СУБД используя типовые индексы.

13.03.2024    2388    spyke    25    

38

Анализируем SQL сервер глазами 1С-ника

HighLoad оптимизация Инструменты администратора БД Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Обработка для простого и удобного анализа настроек, нагрузки и проблем с SQL сервером с упором на использование оного для 1С. Анализ текущих зааросов на sql, ожиданий, конвертация запроса в 1с и рекомендации где может тормозить

1 стартмани

15.02.2024    7355    149    ZAOSTG    66    

95

Удаление строк из таблицы значений различными способами с замером производительности

HighLoad оптимизация Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Встал вопрос: как быстро удалить строки из ТЗ? Рассмотрел пять вариантов реализации этой задачи. Сравнил их друг с другом на разных объёмах данных с разным процентом удаляемых строк. Также сравнил с выгрузкой с отбором по структуре.

09.01.2024    5766    doom2good    48    

63

Опыт оптимизации 1С на PostgreSQL

HighLoad оптимизация Бесплатно (free)

При переводе типовой конфигурации 1C ERP/УТ/КА на PostgreSQL придется вложить ресурсы в доработку и оптимизацию запросов. Расскажем, на что обратить внимание при потерях производительности и какие инструменты/подходы помогут расследовать проблемы после перехода.

20.11.2023    8588    ivanov660    6    

75

ТОП проблем/задач у владельцев КОРП лицензий 1С на основе опыта РКЛ

HighLoad оптимизация Бесплатно (free)

Казалось бы, КОРП-системы должны быть устойчивы, быстры и надёжны. Но, работая в рамках РКЛ, мы видим немного другую картину. Об основных болевых точках КОРП-систем и подходах к их решению пойдет речь в статье.

15.11.2023    4999    a.doroshkevich    20    

72

Начните уже использовать хранилище запросов

HighLoad оптимизация Запросы

Очень немногие из тех, кто занимается поддержкой MS SQL, работают с хранилищем запросов. А ведь хранилище запросов – это очень удобный, мощный и, главное, бесплатный инструмент, позволяющий быстро найти и локализовать проблему производительности и потребления ресурсов запросами. В статье расскажем о том, как использовать хранилище запросов в MS SQL и какие плюсы и минусы у него есть.

11.10.2023    15958    skovpin_sa    14    

98

Как эффективно настроить autovacuum в Postgres для 1С

HighLoad оптимизация Администрирование СУБД Платформа 1С v8.3 Бесплатно (free)

Кто не любит убирать мусор? Думаю, практически все, а вот в Postgres это обязательный ритуал для эффективной работы. Как эффективно настроить уборку за 1С в Postgres, можно прочитать в этой статье и еще раз задуматься о бесплатности Postgres.

05.08.2023    4974    1CUnlimited    5    

51