При организации розничной точки с двумя рабочими местами часто выбирают простую архитектуру: на первой кассе размещается локальная файловая база, а вторая касса подключается к ней через общую сетевую папку Windows (протокол SMB). Однако при росте объема данных (например, справочника физических лиц до 200 000–250 000 записей) система сталкивается с катастрофической деградацией: локально запрос выполняется за 4 секунды, а со второго компьютера тот же запрос длится более 7 минут. При этом сам файл 1Cv8.1CD может неконтролируемо раздуваться с 3,5 ГБ до 16 ГБ.
Проанализируем технические причины такого поведения файловой СУБД 1С и разберем практические способы решения проблемы без дорогостоящей покупки сервера «1С:Предприятия».
Выясним причину многократного падения скорости. В файловом режиме вся логика СУБД выполняется непосредственно на стороне запущенного клиента (процесса 1cv8c.exe или 1cv8.exe):
ПОДОБНО '%номер%', платформа не может применить стандартные индексы B-Tree. Для выборки клиенту требуется последовательно прочитать всю таблицу целиком. Поскольку файл лежит на удаленной машине, клиент начинает непрерывно выкачивать гигабайты страниц базы данных через протокол SMB в свой локальный кэш.1Cv8.1CD лавинообразно увеличивается. Физическое освобождение неиспользуемых страниц происходит только после упаковки утилитой chdbfl.exe или процедурой «Тестирование и исправление».Это самый надежный, проверенный и рекомендуемый фирмой «1С» способ организации работы 2–3 пользователей с файловой базой. Рассмотрим подробнее, как меняется архитектура при таком подходе:
1Cv8.1CD) устанавливается и настраивается бесплатный веб-сервер (Apache 2.4 или встроенный в Windows IIS).1Cv8.1CD напрямую по локальной шине диска.\\Касса1\Base, а по протоколу HTTP к адресу вида http://192.168.1.10/retail_base.В этой схеме веб-сервер берет на себя роль связующего звена СУБД: все тяжелые выборки данных и сканирование страниц файла происходят локально в оперативной памяти и на быстром SSD первой кассы. На второй компьютер передаются только готовые, сериализованные выборки результатов запроса. Сетевой трафик падает в сотни раз, а проблема блокировок файлов через SMB полностью устраняется.
Если в коде используется поиск по неиндексируемому условию с маской в начале строки, даже быстрый диск не спасет от полного сканирования таблицы. Разберем по шагам, как переработать алгоритм поиска:
ПОДОБНО &НомерТелефона со значением параметра "%9167871777%" гарантированно отключает индекс. Если покупатели называют номер телефона, необходимо ввести обязательную нормализацию поля при записи (сохранять только 10 цифр без префиксов «+7», «8» и спецсимволов). Тогда поиск можно выполнять по строгому равенству:
ВЫБРАТЬ
ФизическиеЛицаКонтактнаяИнформация.Ссылка КАК Ссылка,
ФизическиеЛицаКонтактнаяИнформация.НомерТелефона КАК НомерТелефона
ИЗ
Справочник.ФизическиеЛица.КонтактнаяИнформация КАК ФизическиеЛицаКонтактнаяИнформация
ГДЕ
ФизическиеЛицаКонтактнаяИнформация.НомерТелефона = &НомерТелефона
ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 10
ФизическиеЛицаКонтактнаяИнформация.Ссылка КАК Ссылка,
ФизическиеЛицаКонтактнаяИнформация.НомерТелефона КАК НомерТелефона
ИЗ
Справочник.ФизическиеЛица.КонтактнаяИнформация КАК ФизическиеЛицаКонтактнаяИнформация
ГДЕ
ФизическиеЛицаКонтактнаяИнформация.НомерТелефона ПОДОБНО &НомерТелефона
КонтактнаяИнформация в файловом режиме нередко тянет за собой десериализацию родительского объекта. Хранение нормализованного телефонного номера непосредственно в реквизите справочника или в отдельном независимом непериодическом регистре сведений (где измерение «НомерТелефона» является индексированным) сокращает время выборки в разы.Если архитектура временно не позволяет развернуть веб-сервер, скорректируем параметры операционной системы на обоих компьютерах для снижения накладных расходов SMB:
HKLM\System\CurrentControlSet\Services\LanmanWorkstation\Parameters и создадим параметры типа DWORD со значением 0: DirectoryCacheLifetime, FileInfoCacheLifetime и FileNotFoundCacheLifetime. Это предотвратит накопление рассинхронизированного кэша метаданных.1Cv8.1CD. Отключение обязательной подписи пакетов в групповых политиках локальной безопасности существенно снижает сетевые задержки.Large Send Offload (LSO) и TCP Chimney Offload, которые на недорогих сетевых картах часто вызывают скрытые зависания пакетов блокировок.Рассмотрим еще два сценария, полностью исключающих сетевые проблемы файлового доступа: