Стоит ли разносить файлы базы данных и логов транзакций SQL Server на разные диски для 1С?

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Вопрос разделения файлов данных (.mdf) и журналов транзакций (.ldf) является классическим в среде администраторов баз данных. В контексте работы систем 1С:Предприятие, где интенсивность записи и чтения может быть крайне высокой, эта тема не теряет актуальности. Давайте подробно разберем, имеет ли смысл такое разделение на современном оборудовании, и какие еще шаги можно предпринять для ускорения работы сервера.

Теоретические основы: почему это вообще рекомендуют?

Для начала проанализируем, на чем основана рекомендация разделять файлы. Основная причина кроется в различном характере операций ввода-вывода (I/O) для данных и логов:

  1. Файлы данных (.mdf): SQL Server работает с ними в режиме случайного доступа (Random Access). Данные считываются и записываются страницами по 8 КБ из разных областей файла в зависимости от того, какой индекс или таблица запрашиваются.
  2. Файлы логов (.ldf): Запись в журнал транзакций происходит строго последовательно (Sequential Write). Каждая новая операция дописывается в конец файла.

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

Ситуация в эпоху SSD и NVMe

Рассмотрим ситуацию, когда в сервере установлены твердотельные накопители. У SSD нет движущихся головок, и скорость случайного доступа у них на порядки выше. Означает ли это, что разделять файлы больше не нужно? Не совсем. Проанализируем нюансы:

Приоритет №1: Настройка TempDB

Выясним, что на самом деле чаще всего является «бутылочным горлышком» в 1С. Опыт показывает, что это не .ldf основной базы, а системная база tempdb. В 1С она используется для временных таблиц, сложных запросов с итогами и внутренних нужд сервера. Рассмотрим шаги по ее оптимизации:

  1. Вынесение на самый быстрый диск: Если у вас есть выбор, куда положить файлы, отдайте самый быстрый накопитель (например, NVMe или RAM-диск) под tempdb.
  2. Множественность файлов: Разберем правило настройки количества файлов данных tempdb. Рекомендуется создавать количество файлов, равное числу логических ядер процессора (но обычно не более 8). Это позволяет избежать конкуренции за ресурсы внутри самой SQL-базы.
  3. Размер и авторасширение: Установите начальный размер файлов tempdb достаточным для работы (например, по 1-2 ГБ на файл), чтобы сервер не тратил время на их расширение в процессе работы пользователей.

Оптимизация каталога сервера 1С (srvinfo)

Проанализируем специфику 1С. Сервер приложений 1С активно пишет данные в каталог srvinfo (где находятся сеансовые данные и журнал регистрации). Если этот каталог расположен на том же диске, что и базы SQL, они начинают конкурировать за I/O. Посмотрим на эффективное решение:

Размещение папки reg_1541 (внутри srvinfo) на отдельном быстром диске или даже RAM-диске (с настройкой резервного копирования при выключении) может значительно уменьшить «фризы» интерфейса у пользователей. Чтобы быстро разобраться в структуре папок и сопоставить их с конкретными ИБ, пригодится выявление списка баз из папки REG_XXXX. Это связано с тем, что 1С блокирует выполнение некоторых операций до момента подтверждения записи в сеансовые данные или журнал.

Как проверить, нужно ли разделение именно вам?

Давайте научимся измерять производительность. Воспользуемся системным монитором Windows (PerfMon) или попробуйте анализировать SQL сервер глазами 1С-ника для детального изучения ожиданий и запросов. В PerfMon нас интересуют следующие показатели:

Практические рекомендации по настройке файловой системы

Если мы решили разносить файлы по разным разделам (буквам дисков), важно правильно их подготовить. Разберем шаги настройки:

  1. Размер кластера: При форматировании дисков под SQL Server (MDF и LDF) крайне важно выбирать размер кластера 64 КБ вместо стандартных 4 КБ. SQL Server считывает данные блоками (экстентами) по 64 КБ, и такое выравнивание позволяет сократить количество операций ввода-вывода. Понимать, как объекты распределяются внутри файлов, поможет структура хранения базы данных.
  2. Модель восстановления: Если для базы установлена модель восстановления Simple (Простая), то нагрузка на .ldf значительно ниже, так как он используется только для обеспечения целостности транзакций и автоматически очищается. В модели Full (Полная) лог пишет всё и растет до тех пор, пока не будет сделан бэкап лога, что создает постоянную нагрузку.

Итоговый алгоритм действий

Подводя итог нашему анализу, выстроим иерархию действий для оптимизации сервера 1С:

  1. Шаг 1: Убедитесь, что очереди к текущим дискам минимальны. Если задержки (latency) высокие — переходим к изменениям.
  2. Шаг 2: Вынесите tempdb на отдельный физический массив или NVMe.
  3. Шаг 3: Перенесите папку с журналами и кешем 1С (srvinfo) на отдельный диск (можно использовать диск от tempdb).
  4. Шаг 4: Если нагрузка все еще высокая, разнесите .mdf и .ldf по разным физическим устройствам.
  5. Шаг 5: Настройте регламент обслуживания SQL (дефрагментация индексов, обновление статистики), используя инструкцию по настройке регламентных операций MS SQL SERVER. Для автоматизации этого процесса и решения проблем с блокировками страниц отлично подойдет MaintenanceSolution от Ola Hallengren с доработанной IndexOptimize, так как «тормоза» из-за неэффективных планов запросов часто путают с проблемами дисков.

Важное замечание: Разделение файлов на одном и том же физическом RAID-массиве (просто создание разных логических дисков D, E, G) имеет смысл только ради настройки размера кластера. Реального прироста производительности от разделения потоков I/O в этом случае не будет, так как физические головки (в HDD) или контроллер (в SSD) останутся общими.

← На главную