Повсеместно, в среде 1С разработчиков, задается один и тот же вопрос: почему 1C+MSSQL медленнее обрабатывает запросы чем файловая база данных?
Однозначного ответа на этот вопрос нет.
Мы предлагаем разбить вопрос на несколько:
- Работает ли файловый вариант быстрее в операциях «монопольного характера», когда его деятельность не зависит от других пользователей в базе? Под «монопольным характером» мы будем понимать одного активного (работающего) пользователя в информационной базе.
- Работает ли файловый вариант быстрее в многопользовательском режиме, когда пользователи активно конкурируют за ресурсы ?
- Насколько существенна разница в скорости между файловым вариантом и клиент-серверным с точки зрения бизнеса?
Для понимания различия приведем описание возможностей и требований файловой и серверной баз.
Таблица №1.
Сравнение файлового и клиент-серверного вариантов баз 1С
Описание свойства | Файловая 1С | Клиент-Серверная 1С |
Максимальный размер одной таблицы | 4 гб | Не ограничен |
Общий размер базы, при достижение которого приходится задуматься об оптимизации | 15 гб | ~500-1500 Gb |
Количество пользователей с комфортной работой 1С | 10 | 300-700 |
Функции, расходующие ресурсы, но обеспечивающие большую производительность | отсутствуют | транзакционная целостность данных, логирование операций для дальнейшего анализа, функции повышения параллельности работы пользователей |
Дополнительные преимущества | простота обслуживания | обслуживание данных без остановки работы пользователей |
Минимальная область блокировок | На уровне таблиц (требуется меньше ресурсов) | На уровне записей (требуется больше ресурсов) |
Стоимость владения (условно) | Маленькая | Существенно больше чем файловая |
Наличие промежуточного слоя между клиентом 1С и СУБД | нет | Сервер 1С |
Ответ на первый вопрос: с вероятностью 99% файловый вариант работает быстрее (при условии его возможности не ограничиваются т.т.х. компьютера и не достигаются максимальные возможности файлового варианта).
Возникает еще один промежуточный вопрос:
А насколько файловый вариант быстрее клиент-серверного в цифрах?
Ответ на этот вопрос куда интересней и практичней. Наш тест и практика показывают:
- на среднестатистических операциях на соизмеримых объемах данных почте в 2 раза быстрее
- на среднестатистических операциях когда объемы данных начинают превышать объем доступной оперативной памяти и увеличивая интенсивность подкачки — до 3-4х раз быстрее (для замера использовалась операция закрытия месяца)
Однако важно понять что такое «среднестатистическая» операция. Операции, которые оперируют данными в оперативной памяти в клиент-серверном варианте не проигрывают, а иногда выигрывают у файлового варианта Однако таких операций мало и они не показательны. Основную нагрузку составляют операции, фактически обращающиеся к дисковой подсистеме на чтение, и что особенно важно — на запись данных.
При выполнении запроса в файловом варианте нет посредника данных в виде сервера 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С:Предприятие [Электронный ресурс] Официальный сайт 1С. — Режим доступа к электрон. дан.: https://www.v8.1с.ru.
- Настройка Deadlock [Электронный ресурс], сайт Вячеслава Гилева, — Режим доступа к электрон. дан.: type=»book» name=»СРАВНЕНИЕ СКОРОСТИ РАБОТЫ 1C+MSSQL И ФАЙЛОВОГО ВАРИАНТА» description=»В среде 1С разработчиков задается один и тот же вопрос: почему 1C+MSSQL медленнее обрабатывает запросы чем файловая база данных? Однозначного ответа на этот вопрос нет. Попробуем разобраться.» author=»Дворянинов Павел Владимирович, Дроздовский Никита Сергеевич, Лениский Ярослав Юрьевич» publisher=»БАСАРАНОВИЧ ЕКАТЕРИНА» pubdate=»2017-01-18″ edition=»ЕВРАЗИЙСКИЙ СОЮЗ УЧЕНЫХ_28.11.15_11(20)» ebook=»yes» ]