Февраль 8, 2016

Почему тормозит файловая 1С по сети

 

На многих предприятиях мы сталкивались с такой проблемой, что предприятие покупает 1С в файловом варианте на 5-10 пользователей, база выкладывается на общий ресурс и при работе у пользователей все начинает «тормозить». Когда пытаются решить данную проблему, многие фирмы, занимающиеся компьютерным обслуживанием или системные администраторы говорят — «Надо купить новый сервер», «поставте SSD» и тому подобные комментарии, заставляющие усомниться не только в их компетентности, но и в психическом здоровье. А на самом деле все очень просто.

Проблем здесь две:

1) При совместном использовании общего ресурса более чем одним пользователем его кэширование на уровне SMB отключается. В Microsoft не предполагают работы с базами данных, находящимися на общих ресурсах.

2) В файловой базе блокировки устанавливаются на уровне таблиц, что вызывает излишние ожидания на блокировках. 1С не позиционирует файловую БД как объект многопользовательской работы и менять что-то в этом механизме не собирается.
Когда в базе работает один пользователь — все в порядке: чтение/запись осуществляются через кэш, и пользователь никого не ждет. Как только подключается второй пользователь — отключается кэширование, длительность транзакций резко увеличивается — а второй пользователь вынужден еще и ожидать, пока отработает транзакция первого. Т.е. проблемы взаимоумножаются.

Теперь разберем типичные предлагаемые решения.
1) Добавить оперативную память, более мощный процессор или иные не имеющие никакого отношения к проблеме ресурсы. Так называемые «Эксперты», даже не смотрят в счетчики производительности, следовательно не выявив причину проблемы, невозможно ее полностью устранить.
2) Увеличить скорость работы сети. Казалось бы, сделаем быструю сеть — быстрее будут читаться и писаться данные в базу. См. пункт первый: загрузка сетевого оборудования, как правило, в таких случаях невелика.
3) Ускорить дисковую подсистему. Определенный смысл, конечно, есть: действительно, именно дисковая подсистема здесь в какой-то мере является «узким местом». Но вот ускорить ее сколько-нибудь значимо, не потеряв при этом в надежности, мы не можем. Любителям SSD напоминаем, что их быстродействие на малообъемных операциях по-прежнему несравнимо с быстродействием кэшированного ввода-вывода, т.е. с оперативной памятью. А класть базу на рамдиск заслуживает по меньшей мере телесного наказания — из соображений надежности.

Что же делать? Все просто: следует изменить архитектуру решения так, чтобы вышеперечисленные проблемы не возникали.
1) Для конфигураций, работающих в режиме «Управляемое приложение» дешево и сердито будет опубликовать файловую базу на веб-сервере. В этом случае с базой работает исключительно локальный процесс IIS или Apache, и речь об отключении кэширования не идет в принципе (если конечно, не оставить доступ к базе через общий ресурс или развернуть на том же хосте контроллер домена).
2) Клиент-серверный вариант развертывания 1С. Для небольших организаций, с количеством пользователей не более 5, 1С выпустила специализированное решение — Сервер МИНИ. В качестве СУБД можно использовать бесплатную PostgreSQL или Microsoft SQL Server Express edition, в ограничения которой, как правило, подобные внедрения вполне укладываются.
Если же пользователей более пяти — пора приобретать полноценный сервер. Вдумайтесь — сравнимую с его стоимостью сумму Вы платите сотрудникам каждый месяц.
3) Терминальный сервер. На сегодняшний день данные решение самое популярное. К сожалению данное решение уже морально устарело, но кроме этого еще и небезопасное (базу может скопировать любой допущенный пользователь) и проблемное в части торгового оборудования, принтеров и т.п. Но тем не менее решение вполне рабочее.

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