Работа со старыми версиями программного обеспечения на современных операционных системах часто преподносит неприятные сюрпризы. Классический пример — функционирование файловой базы данных 1С:Предприятие 7.7 (DBF) в локальной сети, где совместно работают компьютеры под управлением Windows XP и Windows 10. В одиночном режиме на Windows 10 база «летает», но стоит подключиться пользователю со старой операционной системой, как скорость выполнения отчетов на Windows 10 падает в десятки раз — например, с 15 секунд до 4 минут. Проанализируем физику этого процесса и разберем по шагам все доступные методы решения данной проблемы.
Основная причина такого поведения кроется в кардинальном различии сетевых протоколов и механизмов кэширования в разных поколениях ОС Windows. Давайте разберем этот механизм подробнее:
SMBv1. Windows 10 по умолчанию использует современные и безопасные протоколы SMBv2 и SMBv3. При совместном доступе к одной сетевой папке операционной системе сервера приходится постоянно переключаться и согласовывать разные механизмы сетевого обмена, что приводит к колоссальным задержкам..dbf и индексных файлов .cdx.Рассмотрим практические методы устранения этих тормозов — от тонкой настройки сетевых параметров до кардинальной смены архитектуры работы.
Если мы не можем избежать совместной работы по сети, попробуем заставить сетевой клиент Windows 10 работать с кэшем метаданных более агрессивно, без задержек на постоянное согласование с сервером. Для этого внесем изменения в системный реестр на всех клиентских машинах с Windows 10.
Выполним следующие шаги:
regedit и нажмите Enter.HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Lanmanworkstation\Parameters
0 (ноль):
DirectoryCacheLifetime — отключает задержку кэширования информации о структуре папок.FileInfoCacheLifetime — отключает кэширование свойств файлов.FileNotFoundCacheLifetime — отключает запоминание отсутствующих файлов в сетевой папке.Для быстрой настройки мы можем создать текстовый файл с расширением .reg и применить его на компьютерах пользователей:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Lanmanworkstation\Parameters]
"DirectoryCacheLifetime"=dword:00000000
"FileInfoCacheLifetime"=dword:00000000
"FileNotFoundCacheLifetime"=dword:00000000
После внесения изменений обязательно выполните перезагрузку компьютеров. Это заставит Windows 10 моментально получать актуальное состояние файлов базы данных, минуя сетевые задержки пересогласования кэша.
Современные сетевые адаптеры обладают множеством интеллектуальных функций разгрузки процессора и энергосбережения. К сожалению, для специфического «мелкопакетного» трафика 1С 7.7 эти функции часто оказываются губительными. Оптимизируем настройки сетевых карт на Windows 10.
Откроем Диспетчер устройств, найдем сетевой адаптер, перейдем в его «Свойства» на вкладку «Дополнительно» и отключим следующие параметры:
Также отключим автоподстройку TCP на уровне операционной системы. Для этого запустим командную строку от имени Администратора и выполним команду:
netsh int tcp set global autotuninglevel=disabled
Это зафиксирует размер окна приема TCP и предотвратит искусственное ограничение пропускной способности при обработке трафика баз данных.
Все сетевые оптимизации реестра и сетевых карт лишь частично снижают задержки. Единственным по-настоящему профессиональным решением для стабильной работы 1С 7.7 является переход на терминальный сервер. В этом случае база данных и исполняемые файлы 1cv7.exe находятся физически на одном диске сервера (или в быстрой локальной сети виртуализации), а клиенты получают лишь картинку рабочего стола по протоколу RDP.
Проанализируем варианты реализации терминального доступа:
Если бюджет компании не позволяет приобрести современную серверную лицензию Windows Server, отличным выходом будет использование виртуализации. На современный мощный компьютер с Windows 10 устанавливается гипервизор (например, бесплатный VirtualBox или встроенный Hyper-V).
Внутри гипервизора разворачивается виртуальная машина со старой операционной системой:
Вся база данных 1С размещается внутри виртуальной машины. Пользователи подключаются к сетевой папке этой "виртуалки". За счет локализации сетевых протоколов внутри гипервизора скорость работы значительно возрастает.
Если в качестве файлового сервера в вашей компании используется Linux-машина с установленным пакетом Samba, проблему сетевых задержек DBF-базы можно решить на уровне конфигурационного файла smb.conf. Нам нужно эмулировать логику работы старых серверов Windows, отключив современные методы многопользовательских блокировок.
Откроем конфигурационный файл /etc/samba/smb.conf и добавим в секцию описания сетевой папки с базой 1С следующие параметры:
[1c_base]
path = /mnt/data/1c_base
writable = yes
guest ok = no
locking = yes
strict locking = no
oplocks = no
level2 oplocks = no
share modes = yes
Разберем назначение этих директив:
oplocks = no и level2 oplocks = no — полностью отключают оппортунистическое кэширование на стороне сервера. Это исключает задержки на постоянный сброс сетевых кэшей при совместном доступе клиентов Windows 10 и Windows XP.strict locking = no — отключает жесткую проверку блокировок перед каждой мелкой транзакцией чтения. Платформа 1С сама отлично справляется с блокировкой таблиц, поэтому дублирование этой операции на уровне файловой системы Samba только замедляет процесс.При переносе базы данных 1С 7.7 на компьютер с Windows 10 или при активном сетевом взаимодействии с современными ОС вы обязательно столкнетесь со стандартной ошибкой сортировки кодовой страницы таблиц. Это связано с тем, что в Windows 10 изменились региональные стандарты сравнения строк.
Существует три способа обойти эту ошибку:
C:\Program Files (x86)\1Cv77\bin\) или сам каталог базы данных. Создайте в этой папке пустой текстовый файл и переименуйте его, изменив имя и расширение на ordnochk.lnk. Наличие этого файла в каталоге заставляет платформу полностью игнорировать проверку системного порядка сортировки при запуске.
Мы детально проанализировали проблему сетевых тормозов 1С 7.7 на Windows 10 и рассмотрели различные варианты борьбы с ней. Для достижения наилучшего результата рекомендуем придерживаться следующей стратегии:
ordnochk.lnk, чтобы избежать конфликта региональных стандартов новых и старых операционных систем.