Привет, Хабр! Меня зовут Анжелика Захарова, я — менеджер облачных проектов K2 Cloud, product owner 1C. Сегодня я хотела бы поговорить о производительности систем 1С в облаке. В этой статье мы остановимся на том, почему 1С начинает тормозить, какие компоненты обычно в этом «виноваты». Также мы поговорим о том, как можно разогнать 1С. Если вы уже сталкивались с проблемой производительности или еще только планируете миграцию на эту платформу (но уже чувствуете, что нагрузка будет большая), заходите: под катом мы подготовили для вас 27 рекомендаций по оптимизации 1С, которые можно выполнить самостоятельно или получить «под ключ» из облака.

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

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

В состав платформы 1С входит множество компонентов, и каждый из них может вносить свой вклад в «торможение» вашего решения в целом. Это может быть сервер баз данных, СУБД на сервере баз данных, сервер 1С,  конфигурация 1C, которая «крутится» внутри платформы, сервер лицензирования, терминальная ферма, рабочие места пользователей, а также сеть на каждом участке взаимодействия всех компонентов.

Оптимизируем СУБД

Сервер базы данных — основа любой системы. И как показали опросы, именно его производительность играет основную роль в определении «подвижности» вашей 1С. Для сервера, безусловно, важно обеспечить:

  • высокую пропускную способность дисков в МБ/сек., т. е. скорость чтения данных;

  • высокую скорость дисков в IOPS, чтобы время отклика базы данных было хорошим;

  • равномерность нагрузки на ядра CPU.

Чтобы оптимизировать работу сервера СУБД, можно применить следующие методы:

  1. Разделение данных, логов и tempdb — это классическая оптимизация СУБД, для 1С она прекрасно подходит.

  2. Выбор правильного типа диска для каждого типа данных. Эта практика подразумевает правильную настройку, чтобы  не хранить «горячие» данные на HDD, а для tempdb выбирать самые быстрые диски, потому что на них пишется одновременно очень много данных. 

  3. Разделение базы на активную и архивную.  Ведь чем меньше база данных, тем быстрее ее обслуживает сервер. Соответственно, пользователи будут работать в основном с небольшим набором данных, а архив будет лежать на отдельных дисках, и к нему будут обращаться только те люди, которым он реально нужен.

  4. Разнесение баз на разные диски. Метод хорошо работает, если у вас есть информационная база, которая забирает все ресурсы диска. И вообще в целом рекомендуется сбалансировать базы таким образом, чтобы они друг другу не мешали.

  5. Вынос вложений на файловый сервер, чтобы не допускать раздувания и снижения производительности базы данных.

Оптимизируем сервер, на котором работает СУБД 

Когда речь заходит про оптимизацию работы сервера СУБД, нужно учесть такие параметры, как:

  • потребление кэша;

  • попадание в кэш и, в особенности, «вымывание» кэша;

  • размер базы, блокировки (locks), ожидания (waits), дедлоки (deadlock);

  • фулсканы таблиц;

  • состояние статистики.

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

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

  2. Эксперименты с параллельным обращением. Например, если сервер 1C не очень любит параллельные запросы, можно попробовать сделать два-три потока на уровне СУБД вместо одного.

Оптимизируем сервер 1С

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

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

  • количество рабочих процессов;

  • потребление памяти (если памяти мало, рабочие процессы съедают всю оперативную память); 

  • контекстные переключения;

  • используемая редакция (ПРОФ/КОРП), т.е. переход, если не хватает производительности на лицензии ПРОФ.

На этом уровне можно применить следующие методы оптимизации:

  1. Установить высокочастотный процессор и быстрые диски;

  2. Поэкспериментировать с параметрами рабочего процесса, чтобы он не съедал большое количество памяти или не содержал большое количество сессий пользователей;

  3.  Уменьшить количество информационных баз на одном сервере вместо попытки выгрузить на один сервер много баз (необходимо обратить внимание на контекстные переключения и эффективность работы процессора при большом количестве процессов);

  4.  Разделить роли по узлам кластера (для редакции КОРП), чтобы разные функции работали на разных серверах.

  5.  Разделить данные на активные и архивные на уровне 1С, поскольку чем меньше база данных, которая лежит под 1С (активная часть), тем лучше.

Оптимизируем конфигурацию 1С

Конфигурация — это то, с чем непосредственно работают пользователи и что своими руками правят разработчики. Чтобы ничего не тормозило, нужно тщательно следить за процессом разработки и тестирования. Бывает так, что  обновления, тестирование которых показывает отличные результаты, выкатывают в прод, и сервер «ложится», потому что разработчик не учел, что с улучшением будет работать очень много пользователей, а сами улучшения требуют очень больших ресурсов. Производительность 1С будет зависеть от качества кода, особенно если его пишут джуны, от степени оптимизации запросов (чтобы пользователь получал из базы данных только нужные ему строки), а также от полномочий пользователей. Поэтому рядовому сотруднику нельзя разрешать запускать большие отчеты или работать с большими объемами данных. Эту привилегию можно оставлять, например, только  главному бухгалтеру.

Чтобы оптимизировать конфигурацию 1С, нужно проводить:

  1. Тщательное тестирование кода перед выкаткой в прод.

  2.  Внедрение APDEX для ключевых и длительных операций. 1C позволяет встраивать в код строки с результатами запросов и с комментариями, чтобы можно было видеть выполняемые пользователями действия и причины сбоев. Например, если у двух пользователей 1C работает по-разному, APDEX позволяет выявить, что причина более медленной работы систем может заключаться, например, в том, что один пользователь вызывает отчет за неделю, а другой — за год. Т.е. система работает вовсе не медленно, просто у одного из пользователей она обрабатывает больший объем данных.

  3.  Запретительную политику на выгрузку больших объемов для тех, кому это не нужно, поскольку сотрудники могут по незнанию выставлять неверные параметры и запускать, например, большие отчеты, которые могут положить всю систему.

Оптимизируем сервер лицензирования

Бывали случаи, когда производительность упиралась в сервер лицензирования, потому что он находился далеко, например, за долгим VPN с большим временем отклика, а 1C почему-то любит часто проверять лицензию. Соответственно, необходимо обращать внимание на следующее:

  1.  Нужно правильно размещать сервер лицензирования, то есть рядом с кластером.

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

Оптимизируем терминальную ферму

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

  1.  Следовать рекомендациям вендора по параметрам узлов. Microsoft, например, рекомендует не превышать количества в 50 пользователей на одном узле, потому что это оптимальное число, с которым узел спокойно справляется. CPU и память уже подстраиваются под задачи, которые решаются на терминальной ферме.

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

  3.  Отслеживать нагрузку CPU и память и вовремя их увеличивать.

  4.  Хранить профили пользователей на быстрых дисках, потому что клиент 1С размещает в профиле пользователей все временные данные. Таким образом, даже если сервер 1С выдает данные достаточно быстро, клиент 1С может задерживать обработку данных из-за узких мест.

Оптимизируем рабочие места пользователей

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

Если пользователи начинают жаловаться на то, что 1С начинает тормозить, необходимо провести проверку рабочих мест. При их комплектации важно:

  1.  Правильно подобрать «железо» для 1С. Да, может быть это совет из серии «Капитана Очевидность», но нередко проблема оказывается именно там.

  2.  Правильно настроить ПО, особенно антивирус.

  3.  Проверить, достаточно ли быстро работает сеть.

  4.  Предусмотреть возможность переключения пользователя на терминальную ферму, если обеспечить хорошее рабочее место не получается.

Оптимизируем сеть

Из-за низкой пропускной способность сети и высоких задержек именно сеть может стать камнем преткновения для нормальной работы 1С. При этом проблемы проявляются по мере увеличения нагрузки и роста масштабов вашей экосистемы.

Методы оптимизации

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

  2.  Обеспечить быстрое подключение рабочего места или предоставить терминальный доступ. То есть всякие изыски, типа VPN через спутник — не самое лучшее решение, потому что сервер может сформировать какую-либо форму за секунду, а до пользователя это форма может добираться минуту, хотя субъективно будет казаться, что медленно работает вся система.

Преимущества облака

Как вы можете видеть, список получается очень даже внушительным. В нем есть и простые приемы, и рекомендации, требующие достаточно глубокого погружения. Дело в том, что для высокой производительности недостаточно просто «залить 1С ресурсами». Очень часто оказывается, что нужно качественно иначе подойти к организации архитектуры, и поэтому бизнес-заказчикам хочется сразу получить «то, что нужно» для развертывания и дальнейшего расширения 1С. И именно поэтому сегодня мы все чаще видим, что люди приходят в К2 Cloud не просто «За 1С», и даже не «За 1С в облаке» — к нам обращаются именно за комплексной экспертизой. Наша команда настраивает окружение под размещение систем 1С, мониторинг для отслеживания узких мест производительности и реализации мер превентивного реагирования, а также оказывает услуги комплексной поддержки на протяжении всего жизненного цикла 1С в Облаке. 

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

Облако — оптимальная платформа, которая обеспечивает повышение производительности, отказоустойчивость и гибкое масштабирование в сравнении с локальной инфраструктурой. Срок предоставления доступа к 1С в К2 Облаке занимает как правило от одного часа, а срок выделения сервера — от одного дня, что несравнимо со сроком поставки оборудования для локальной инфраструктуры.

Второе важное преимущество — сокращение затрат. По нашему опыту, закупка собственной серверной инфраструктуры и/или построение собственной серверной зоны всегда выходит дороже. Ценообразование, как правило, строится следующим образом: серверное оборудование, сетевое оборудование, коммутация, энергопотребление, инженерка, отказоустойчивость, охлаждение, обслуживающий штат. Пользуясь услугами облачного провайдера, вы можете сократить издержки бизнеса на 20% или более в части стоимости владения ИТ-системами и затрат на вход.

Третье преимущество — безопасность и надежность. К2 Облако имеет сертификаты и аттестаты соответствия стандартам ГОСТ 57580, PCI DSS, 152-ФЗ, ISO 27017 и ISO 27001, которые подтверждают высокий уровень безопасности. Если же рассматривать именно закон «О защите персональных данных», мы можем обеспечить защиту ваших информационных систем вплоть до первого уровня защищенности.

Четвертое преимущество — это принцип единого окна для решения всех вопросов. В рамках комплексных проектов мы всегда несем ответственность за каждого члена нашей команды, в том числе за партнеров, которых мы привлекаем для решения комплексных задач. Мы обеспечиваем поддержку с нашей стороны от инфраструктуры до установки и поддержки прикладного ПО, при этом среднее время реакции – до 15 минут, выделенный персональный менеджер и поддержка до уровня мессенджеров. 

Заключение

Подводя итог всего, о чем мы говорили выше, я должна сказать, что оптимизировать 1С, конечно, нужно. И, естественно, намного проще воспользоваться для этого уже готовой экспертизой — что мы и предлагаем клиентам K2 Cloud. Но если вам по какой-то причине удобнее потратить свои ресурсы и пройти тот же путь, вы можете смело использовать все 27 способов оптимизации — они опробованы в боевых условиях и уже принесли много пользы резидентам нашего облака.

Комментарии (28)


  1. Fishkarius
    07.11.2024 11:53

    О чем статья? Два ведра воды. "Ежели, значить, оптимизировать всё, то 1С будет работать быстро. А ежели нет, то нет".


    1. MAXH0
      07.11.2024 11:53

      Я думал статья будет о том как разогнать 1С ссаными тряпками.


      1. kompilainenn2
        07.11.2024 11:53

        а взамен что? мне очень интересно


        1. MAXH0
          07.11.2024 11:53

          Вот и ожидал увидеть 27 решений )))

          1С  продукт нишевый, завязанный на кучу смежного софта, нормативки и специалистов одного продукта. Хорошими и даже удовлетворительными они не станут. Я реалист. НО безальтернативность угнетает. Знаете сколько запросов от малого бизнеса на "Тыж программист. Напиши мне программу управления складом"?


          1. akabrr
            07.11.2024 11:53

            Нормальный вопрос, что мешает написать?


            1. shachneff
              07.11.2024 11:53

              Ну, к примеру, он не 1сник, и без бизнес-аналитика, фронтендера, тестировщика и тимлида работать не может


            1. killyself
              07.11.2024 11:53

              У малого бизнеса нет денег ее оплатить


      1. freelook00
        07.11.2024 11:53

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


    1. mlnw
      07.11.2024 11:53

      О чем статья? Два ведра воды. "Ежели, значить, оптимизировать всё, то 1С будет работать быстро. А ежели нет, то нет".

      Статья не об этом. Статья о том, что чтобы быстро заработала 1С on-premises - это надо 100500 пунктов соблюсти (сложно). А можно купить облако - и там специально обученные люди все эти пункты уже проделали, и всё летает.


  1. vis_inet
    07.11.2024 11:53

    Продолжают ли работать лицензии 1С при изменении параметров виртуальных серверов?


    1. Unbearability
      07.11.2024 11:53

      Программная лицензия в 99% случаев нет. Аппаратной всё равно.

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


    1. AnZakharova Автор
      07.11.2024 11:53

      Если речь идет об изменении (уменьшении или увеличении) ресурсов виртуальной машины, то, конечно, не слетает


      1. vis_inet
        07.11.2024 11:53

        Потому, что сервис лицензирования на отдельной неизменяемой виртуалке?


        1. AnZakharova Автор
          07.11.2024 11:53

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


  1. Unbearability
    07.11.2024 11:53

    >Кроме этого, на производительность влияют : ... используемая редакция (ПРОФ/КОРП)

    Каким образом? ПРОФ ограничен только количеством ядер, но проще и дешевле поднять в кластере еще один сервер с 12 ядрами, чем приобретать КОРП.

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

    >Кроме этого, на производительность влияют: ... количество рабочих процессов, потребление памяти

    Это действительно так. Но тут лучше не экспериментировать с параметрами рабочего процесса, а понимать как это работает и в чем конкретно причина проблем с производительностью и как её решить и почему именно так. А в статье было бы не плохо раскрыть этот вопрос.

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

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

    И каким образом это поможет?

    Разделить данные на активные и архивные на уровне 1С

    Совершенно не понимаю что тут имеется в виду. Можно более подробнее раскрыть суть?

    Если у вас проблему производительности, то лучше для начала понять в чем конкретно причина, где узкое место и уже исходя из этого знания планировать осознанное решение. А не экспериментировать с настройками и архитектурой авось что-то получится. Но чтобы понять причину первое что нужно сделать это настроить мониторинг всего этого хозяйства. О чем в статье ни слова.


    1. mlnw
      07.11.2024 11:53

      Совершенно не понимаю что тут имеется в виду. Можно более подробнее раскрыть суть?

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


  1. mogaec
    07.11.2024 11:53

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


    1. LM7777
      07.11.2024 11:53

      LLM


  1. anton99zel
    07.11.2024 11:53

    Ожидал увидеть именно рецепты, а по факту всё свелось к тому, что нужен процессор на 5ггц и nvme. Всё.


    1. Ulrih
      07.11.2024 11:53

      Или несколько процессоров на 5ГГц


    1. AlexeevEugene
      07.11.2024 11:53

      самый грязный рецепт: Разместить MSSQL и 1С APP на одном сервере) +10-15% производительности))

      +включить на SQL Autoudpate statistic - это часто помогает ускорить.


      1. Unbearability
        07.11.2024 11:53

        Я бы добавил, что тогда надо и SharedMemory включить не забыть.

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

        Но в малых системах конечно можно попробовать. В больших стоимость администрирование подобного становится дороже чем потратиться на ресурсы.

        SQL Autoudpate statistic можно на малых системах, в больших может быть рост ожидания на блокировках схемы, т.к. обновление статистики накладывает блокировку на изменение схемы по объекту по которому пересчитывается статистика. Если такое происходит, то лучше пересчитывать статистику в плане обслуживания все таки.


  1. AlexeevEugene
    07.11.2024 11:53

    1. Добавить недостающие индексы

    2. Исправить кривой код

    3. Увеличить частоту процессоров


    1. denilenko
      07.11.2024 11:53

      1 и 2 я бы поменял местами, а вот по поводу 3, что называется бомбит: столько лет уже пишется эта 1С, цены регулярно на все продукты повышаются, а один из основных способов увеличения производительности так и остается покупка нового "железа". Нуралиев, твои программисты в параллелизм вообще не могут?


      1. Unbearability
        07.11.2024 11:53

        А что именно вы хотите распараллелить в транзакционной системе?


        1. denilenko
          07.11.2024 11:53

          Я хочу чтобы сервер эффективнее работал с несколькими ядрами.


          1. Unbearability
            07.11.2024 11:53

            В многопользовательском режиме при достаточно большом количестве пользователей 1С +/- эффективно использует (равномерно нагружает) все ядра при должной настройке.

            Но некоторые вещи нельзя распараллелить и именно из-за них есть рекомендация при прочем равном пожертвовать количеством ядер в сторону частоты ядра в определенных случаях. Но тут все довольно индивидуально. Кому-то лучше будет больше ядер.


  1. Epitafy-Zamogilny
    07.11.2024 11:53

    Тутоблако вообще то рекламируют. В него говнокод внедрить труднее.


  1. Wadzhio
    07.11.2024 11:53

    Я много лет работал с 1С7 и после перехода на 1С8 понял, что новое намного медлительные старого. Специально купили новый мощный компьютер с производительной дисковой подсистемой. Сотрудники регулярно жалуются на медлительность 1С8 и на тех программистов, что её создали. Лицензия на 5 пользователей, бухгалтерия. Работа через RDP на сервере не сильно заметно ускоряет работу. Это ещё у меня фирма маленькая, но каково тем у кого десяток или более пользователей я даже не представляю. Вендор предлагает отдельно докупить управление торговлей за кучу денег... Это прогресс, или деградация 1С?