THE BELL

Есть те, кто прочитали эту новость раньше вас.
Подпишитесь, чтобы получать статьи свежими.
Email
Имя
Фамилия
Как вы хотите читать The Bell
Без спама

Проблема

На форумах постоянно задается один и тот же вопрос: почему 1C+MSSQL медленнее обрабатывает запросы чем файловая?

Затем обычно идет «флуд» на несколько десятков страниц.

Есть два популярных «течения» в таких форумах — одни говорят что для клиент-серверного варианта это нормально, файловый вариант всегда должен работать быстрее, другие говорят что 1С плохо работает с субд.

В результате «баталий и выяснения отношений» на форумах люди расходятся при своих мнениях.

Мы предлагаем разбить вопрос на несколько:

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

Под «монопольным характером» мы будем понимать одного активного (работающего) пользователя в информационной базе.

2. Работает ли файловый вариант быстрее в многопользовательском режиме, когда пользователи активно конкурируют за ресурсы (например при проведении реализации товаров обращаются массово к остаткам на складе)?

3. Насколько существенна разница в скорости между файловым вариантом и клиент-серверным с точки зрения бизнеса?

Что на самом деле

Таблица №1. Сравнение файлового и клиент-серверного варианата 1С

Файловая 1С Клиент-Серверная 1С
Максимальный размер одной таблицы 4 gb ~сотни терабайт
Размер на практике когда возникают «тормоза» в 1С при достижении объема базы данных ~16 G b ~500-1500 Gb
Количество пользователей с комфортной работой 1С 3-10 (далее мешают табличные блокировки) 300-700 человек (далее обычно нужно покупать более мощное железо и оптимзировать код еще раз)
Функции, отъедающие ресурсы, которые бы могли бы потрачены на лучшую производительность нет

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

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

Ответ на первый вопрос: Работает ли файловый вариант быстрее в операциях «монопольного характера», когда его деятельность не зависит от других пользователей в базе — с вероятностью 99% файловый вариант работает быстрее (при условии его возможности не ограничиваются неудачным железом и не достигаются максимальные возможности файлового варианта)!.

Не верьте нам на слово — проверьте сами. Возьмите (подробное описание здесь ) и убедитесь сами (проверьте сначало в файловом варианте, затем клиент-серверном).

Если Вы не верите тесту, то протестируйте подходящую для проверки по вашему мнению операцию также в файловом и клиент-серверном варианте. Мы рекомендуем за основу взять например «закрытие месяца» на базах размером до 4х гигабайт (иначе на файловом варианте может достигнуто ограничение по размеру).

Понятно, если у Вас закрытие месяца в файловом варианте не возможно, то обсуждать преимущества файлового варианте для Вас нет смысла, Вы согласны?

Возникает еще один промежуточный вопрос:

А насколько файловый вариант быстрее клиент-серверного в цифрах?

Ответ на этот вопрос куда интересней и практичней. Наш тест и практика показывают:

  1. на среднестатитических операциях на соизмеримых объемах данных почти в 2 раза быстрее
  2. на среднестатитических операциях когда объемы данных начинают превышать объем доступной оперативной памяти и увеличивая интенсивность подкачи — до 3-4х раз быстрее — это как раз пример закрытия месяца

Однако важно понять что такое «среднестатистическая» операция. Оказывается, что операции, которые оперируют данными в оперативной памяти в клиент-серверном варианте не проигрывают, а иногда даже выигрывают у файлового варианта !

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

Причем даже безобидный отчет при построении тоже может писать данные, ну например в служебную базу данных tempdb в случаи использования MS SQL Server.

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

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

Отсюда следствие — на одном и том же компьютере можно сделать В МОНОПОЛЬНОМ РЕЖИМЕ больше работы в файловом варианте, чем в клиент-серверном (в том же монопольном режиме) .

В итоге вроде как клиент-серверный вариант может сделать меньше работы, требует больше ресурсов, а где же «профит», почему он используется практически везде?

Поможет ответить нам второй вопрос нашей статьи: работает ли файловый вариант быстрее в многопользовательском режиме, когда пользователи активно конкурируют за ресурсы (например при проведении реализации товаров обращаются массово к остаткам на складе)?

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

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

Мы получаем простую арифметику — 100 х 10 х 10 =10 000 строк вводится в информационную систему в течения дня.

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

В клиент-серверном варианте это сработает. Документы проведутся параллельно.

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

Мы знаем что по умолчанию длительность таймаута блокировки 20 секунд. Теоретически можно предположить что кроме первого пользователи все последующие будут друг друга ждать по 20 секунд и затем проводить свои документы. Суммарное ожидание составит 100 пользователей х 1 документ х 20 секунд = 2000 секунд ожидания. Чувствуете — это полчаса простоя пользователей.

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

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

Более того, при попытке 2,3 документы угубят картину и за день даже при идеальном коде файловый вариант «накопит» 100 пользователей х 10 документов х 20 секунд = 20000 секунд ~ 5 c половиной часов простоя.

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

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

С точки зрения бизнеса производительность — это количество работы за день сделанной всеми 100 пользователями, а не одним монопольно. Поэтому бизнесу важнее сколько в итоге будет введено данных в систему суммарно всеми пользователями. Оценивая производительность коллектиной работы — файловый вариант в десятки-сотни раз проигрывает клиент-серверному варианту .

И снова призываем не верить нам на слово. Возьмите 1С:Стандартный Нагрузочный Тест http://v8.1c.ru/expert/etp.htm или разработайте свой коллективный тест и убедитесь сами с достоверности наших утверждений.

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

Возможно Вы также захотите приобрести 1С:КИП, обратите внимание на особенности .

Теперь ответим на третий вопрос:Насколько существенна разница в скорости между файловым вариантом и клиент-серверным с точки зрения бизнеса?

Файловый вариант несильно опережает клиент-серверный вариант в монопольном режиме и очень существенно проигрывает в многопользовательском режиме.

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

Файловый вариант не имеет механизмов контроля целостности данных. Например, если произойдет сбой в сети при передачи данных, или отключится свет, то в файловом варианте что то успеет записаться, а что нет. Целостность данных будет разрушена. В клиент-серверном варианте в подобных случаях просто произойдет откат незавершенной транзакции, и неполных данных в систему не попадет, целостность данных будет сохранена.

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

А теперь надо задать «правильный вопрос»:

4. Почему возник вопрос оценить разницу в скорости файлового и клиент-серверного варианта?

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

Но вместо изучения причин, которые спровоцировали проблему в клиент-серверном варианте, он обнаруживает что в файловом варианте такой проблемы нету. Его не беспокоит что проблема может быть в «посреднике», который отсутствует в файловом варианте.

Правильный ответ заключается в том что неважно насколько быстрее файловый или клиент-серверный вариант, а важно что именно вызывает замедления в каждом КОНКРЕТНОМ случае. Слово ПРОИЗВОДИТЕЛЬНОСТЬ опасное, так как на самом деле его надо расписывать в виде списка операций в системы, которые в совокупности и формируют это производительность. Надо рассматривать каждую операцию, начиная с той, которая создает наибольший вклад в замедления.

Вообщем то этим мы профессионально и занимаемся уже много лет успешно.

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

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

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

Со временем база начинает притормаживать и наступаем момент когда необходимо переходить на СУБД. Как же определить тот момент, когда стоит задуматься о переходе на SQL? Ведь сам переход и подготовка для него инфраструктуры требует немало времени, а также денежных затрат.

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

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

    Если несколько пользователей обратились к данным, хранящимся в одной таблице — то данные будут доступны только первому пользователю, а всем следующим будет выдано сообщение «Ошибка блокировки данных».

    Если в базе работает от 1 до 5 пользователей, то данная проблема практически не заметна, так как вероятность того, что в один момент времени к одной и той же таблице обратятся несколько пользователей невелика, но с каждым дополнительным пользователем эта вероятность возрастет.

    Замедление работы. А именно, медленное проведения документов, формирование отчетов, снижение скорости загрузки самой программы. Подробнее о методах ускорения 1С можно почитать .

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

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

Теоретически момент перехода возможно просчитать заранее. Производительность 1С зависит от 3 ключевых факторов:

  • количества пользователей;
  • типа конфигурации;
  • объема базы.

Основным показателем, который влияет на производительность базы 1С является количество пользователей работающих с базой. Файловая база при количестве пользователей от 1 до 5 работает значительно быстрее чем СУБД и в таком случаи перевод на SQL повлечет не только дополнительные затраты, но и ухудшение работы системы.

При количестве пользователей порядка 5-10 работа файловой базы отличается от работы СУБД не значительно, после 10-15 пользователей производительность файловой базы очень сильно падает и если количество пользователей довести до 20-25 с базой практически не возможно будет работать по причине блокировок и очень сильному замедлению работы. Ниже приведены графики зависимости производительности 1С от количества пользователей для разных конфигураций.

Рисунок 1 - Схема работы с зашифрованной базой данных


Также весомой характеристикой базы есть ее размер, в случае, если файловая база занимает более 1 Гб данных, ее целесообразно перевести на СУБД.

Рассмотрим и другие преимущества использования СУДБ SQL вместо файловой базы

    Масштабируемость. Использование СУБД MSSQL даст возможность расширять количество пользователей, создавать большое количество баз и, при выделении дополнительного количества аппаратных ресурсов, это не приведет к торможению базы и блокировкам данных.

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

    Обслуживание. В СУБД MS SQL есть возможность настроить автоматические регламентные операции, которые будут периодически оптимизировать работу с базой.

    Резервирование. Благодаря использованию СУБД, возможно реализовать более надежную систему резервного копирования средствами самого SQL, также резервное копирование лога СУБД дает возможность восстановить данные с точностью до транзакции.

    Мониторинг. MS SQL имеет ряд датчиков, отслеживая которые заранее возможно увидеть проблемы с производительностью, безопасностью, а также, отслеживать успешное выполнение операций оптимизации и резервного копирования.

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

Концептуальное описание подготовки к процессу перехода на СУБД:

1. Закупить ПО. Для перехода на СУБД вам понадобятся следующие лицензии:

    лицензия для Сервера 1С предприятие;

    лицензия на сервер MS SQL;

    лицензии для клиентского подключения к MS SQL.

2. Настроить СУБД. Для того, чтобы MS SQL правильно функционировал, его нужно предварительно настроить и под работу с 1С, а также настроить планы оптимизации и резервного копирования.

3. Настроить сервер приложений 1С.

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

Системная интеграция. Консалтинг

2 февраля 2015 в 16:04

Максимально эффективная по скорости работы - серверная схема, для клиент-серверной 1С 8.х

  • Программирование ,
  • Microsoft SQL Server

Предисловие

Постоянно сталкивался с высказываниями ИТ специалистов «сеть нагружена на 20%… процессоры на 50%… очередей к дискам мало… Значит сеть и сервера справляются… смотрите код в 1С проблемы исключительно там».

На самом деле происходило следующее (сервер 1С и SQL разнесены на разные компьютеры): сеть практически использовалась по максимуму(эти "20% загрузки сетевого интерфейса " = «20% полезные данные» + «80% потеря на служебной обработке» ). И соответственно из-за малой ширины канала обмена «полезными» данными - SQL сервер с «Сервером 1С» постоянно ожидали друг друга, что вело к малой утилизации ресурсов CPU и дисковой системы.

Ведение: Сначала хочу заострить внимание на том что же такое 1С платформа?.

Итак начнем с главного 1С - построенная на ORM (объектно-реляционном отображении)-система и программист в ней работает не напрямую с реляционным представлением, а с объектами.
ru.wikipedia.org/wiki/ORM

Программист в среде 1С - пишет объектную логику, а за сборку/разборку и запись объектов в «плоский вид» по таблицам базы данных отвечает сама платформа.

Основные "+" и "-" с точки зрения ORM:

"+" Программист в среде ORM получает преимущество в скорости разработки приложения из-за уменьшения количества кода и его простоты по сравнению с исключительно реляционным программным кодом (пример SQL запросы). А также освобождается от написания кода работающего непосредтсвенно с записями в таблицах Реляционной СУБД.* 1

"-" Сложности для создателей «платформ» ORM и проблемы производительности:

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

*1«Уточнение». Несмотря на то, что 1С 8.х позволяет работать с реляционно-подобным кодом (только чтение) в объекте 1С «Запрос» - это все-таки не напрямую один-в-один транслируемый в реляционную СУБД запрос к таблицам хранения данных, а прежде всего «Объектный запрос» - также не минующий стадию сборки разборки объектов. Поэтому зачастую вместо много-тысяче строчных «Объектных запросов» - наиболее оптимально по быстродействию кода и скорости разработки - написать объектный не ряляционно-подобный код.

Глава 1: Расмотрим модель клиент-серверной 1С 8.х

Отмечу основные «узкие» места влияющие на производительность:

1) Первое узкое место - это коммуникационная среда передачи данных .
На рисунке стрелками показаны потоки обмена данными, где «красные» - это Реляционная СУБД<->Объектная СУБ, «оранжевые» - синхронизация между Объектными СУБД.
Т.к. при использовании отдельных серверов для СУБД и кластеров 1С – коммуникационная среда это сетевые соединения – то существуют существенные задержки в передаче данных многочисленными мелкими порциями – как из-за латентности самой физической реализации интерфейсов, так и из-за латентности узлов в этой сети.

Рассмотрим на примере сетевого стандарта Ethernet Gigabit (график зависимости скорости передачи данных… ниже )
на примере работы Сервера 1С с MS SQL (по умолчанию размер коммуникационных пакетов 4 кб) :

На графике видно, что при использовании пакетов ДАННЫХ =4 кб пропускная способность рассмотренной сети всего 250 Мегабит/с. (как правильно заметили в комментария к публикаци: это не пакеты протоколов например уровня TCP , а пакеты ДАННЫХ которые генерируют приложения участвующие в обмене)

Из практики: такое разнесение на Два отдельных сервера
MS SQL (сервер №1)< - Ethernet Gigabit ---> «Сервер 1С»(сервер №1)
проигрывало по скорости работы платформы
на 50%
варианту MS SQL (сервер №1) < - Shared Memory (без сети через участок памяти) ---> «Сервер 1С»(сервер №1)… и это уже «на одном высоконагруженном пользовательском сеансе»

2) Узкое место - это количество отдельных компьютеров «кластеров 1С» , чем их больше тем больше затраты на синхронизацию и как следствие уменьшение производительности системы.

3) Узкое место - количество отдельных процессов сервера 1с , чем их больше тем больше затрат на их синхронизацию… Но тут скорей всего необходимо найти «золотую середину» - для обеспечения стабильности. 2*
2* «Уточнение» - для MS Windows существует такое правило:
Процессы дороже чем потоки, что означает применительно к данному случаю на практике следующее: скорость обмена между двумя потоками внутри одного процесса значительно превышает, скорость обмена между потоками находящихся в разных процессах.

Поэтому например «Файловая 1С 8.х» всегда превышает по скорости однопользовательской работы платформы в клиент-серверном варианте. Все просто т.к. в случае «Файловой 1С 8.х» поток «Реляционной СУБД» общается с потоком «Объектной СУБД» внутри одного единого процесса.

4)Узкое место – одно-поточность пользовательского сеанса , т.к. каждый отдельно взятый - пользовательский сеанс не распараллеливается платформой на несколько, то его работа ограничивается использованием ресурсов одного ядра CPU => следовательно желательна максимальная скорость каждого ядра, в этом случае быстродействие платформы 1C например на 10-ядерном CPU по 1 ггц - будет значительно уступать быстродействию платформы на 4-ех ядерном CPU по 3 Ггц – естественно до определенного количества потоков.

Глава 2(Итог): Рассмотрим не масштабируемый и масштабируемый варианты - наиболее эффективных схем для платформы 1с 8.х. для OS Windows (пологаю для Linux ситуация аналогична)

1-Вариант(не масштабируемый). В расчете на 100 «высоконагруженных пользовательских сеанса»

1) эффективен обычный 2-ух сокетный сервер с 4-ех ядерными CPU по 3 Ггц.

3) MS SQL < - Shared memory --> «Сервер 1С»

2-Вариант(масштабируемый). начиная со 100 «высоконагруженных пользовательских сеанса» и далее ….
Тут логичней всего пойти по пути немецкой 1с-ки «Sap HANA»))
Собирать модульный «Супер-компьютер» от фирмы SGI – состоящий из «лезвий» на 2-х сокетных материнских платах, каждое лезвие соединяется друг с другом сложной топологией сверх-быстрого интерконнекта на основе NUMA-чипов, и все находится под управлением единой OS. Т.е. программы внутри такого сервера по определению имеют доступ к ресурсам любого «лезвия».

1) добавляем «лезвия» по необходимой нагрузке… из расчета примерно одно «лезвие» на 100 пользователей.

2) быстрая дисковая система на SSD

3) MS SQL < - Shared memory --> «Сервер 1С»

THE BELL

Есть те, кто прочитали эту новость раньше вас.
Подпишитесь, чтобы получать статьи свежими.
Email
Имя
Фамилия
Как вы хотите читать The Bell
Без спама