SQL Server установлен, база 1С создана, пользователи работают. Через несколько недель LDF забирает всё свободное место: база унаследовала модель восстановления Full от model, а копирование журнала никто не настроил.
Исправлять такую схему придётся под нагрузкой. До установки лучше решить, где будут работать 1С и SQL Server, сколько памяти получит СУБД, куда лягут её файлы и как пойдут резервные копии. После запуска проверьте рабочую операцию и восстановление базы — зелёного статуса службы для приёмки мало.
Здесь речь о проектировании нового сервера. Параметры действующего экземпляра собраны в порядке доводки SQL Server под нагрузку 1С.
Решите, останутся ли 1С и SQL Server на одной машине
Небольшую базу можно запустить на виртуальной машине вместе с сервером 1С. Такую схему приводит практическое руководство IP-Way по настройке SQL Server для 1С.
Старт получается проще, но обе системы делят одни ресурсы. SQL Server держит данные в буферном кэше. Рабочие процессы 1С тратят память на сеансы и серверные вызовы. Если RAM не хватает обеим ролям, один лишь предел памяти SQL Server проблему не закроет.
| Признак | Одна виртуальная машина | Отдельный сервер СУБД |
|---|---|---|
| Памяти хватает с небольшим запасом | Роли можно оставить вместе | Усложнять схему разделением пока нет смысла |
| SQL Server и процессы 1С регулярно конкурируют за RAM | Память придётся делить жёсткими пределами | Каждая роль получает свой объём RAM |
| Процессор одновременно занят запросами и рабочими процессами 1С | Одна роль отнимает процессорное время у другой | CPU для СУБД можно подбирать и расширять отдельно |
| Диски обслуживают базу, журнал и временные операции | Обе роли зависят от одной очереди ввода-вывода | СУБД не делит хранилище с сервером приложений |
| База быстро растёт | С каждым месяцем перенос усложняется | СУБД можно масштабировать отдельно |
| Окно обслуживания сокращается | Работы затрагивают обе роли | СУБД можно обслуживать независимо |
Совмещённая машина годится для старта. Проектировать её как постоянную схему под любую будущую нагрузку не стоит.
IP-Way советует разделять роли, если системе регулярно не хватает памяти, а 1С и SQL Server спорят за CPU или диски. Быстрый рост базы и короткое окно обслуживания — ещё два сигнала. Если они заметны до запуска, разнесите роли сразу.
При схеме из двух машин заранее проверьте сетевой маршрут между сервером приложений и СУБД. Права, службы и рабочие процессы описаны в руководстве по компонентам кластера 1С.
Разложите файлы до установки SQL Server
SQL Server создаёт четыре разных потока ввода-вывода: данные, журнал транзакций, tempdb и резервные копии. IP-Way советует разнести их по разным томам или массивам.
Одних букв дисков недостаточно. Если четыре тома собраны на одном массиве, запросы всё равно идут к тем же накопителям через тот же контроллер. Смотрите физическую схему, а не список каталогов в установщике.
| Назначение хранилища | Что размещать | Что произойдёт при конкуренции или отказе |
|---|---|---|
| Данные | Файлы MDF и NDF рабочих баз | Запросы ждут чтения страниц и записи изменений |
| Журнал | Файлы LDF | Транзакции ждут последовательной записи в журнал |
| Временная база | Файлы данных и журнал tempdb | Временные таблицы, сортировки и версии строк делят одну очередь |
| Резервные копии | Полные, разностные копии и копии журнала | Копирование нагружает рабочее хранилище |
| Внешнее хранилище | Копии, которые переживут отказ сервера | Отказ массива не уничтожит рабочую базу вместе с её копиями |
Рабочие файлы и резервные копии не должны погибнуть при одном отказе. Это главная граница в раскладке хранилищ.
Каталог на том же сервере можно использовать как промежуточную точку. Итоговые копии IP-Way рекомендует переносить за пределы рабочего сервера.
Каталоги SQL Server исключите из антивирусной проверки в реальном времени. По предупреждению IP-Way, такая проверка задерживает обращения к файлам базы. Добавляйте в исключения конкретные каталоги SQL Server, а не весь диск.
Задайте пути до создания рабочей базы. Перенос MDF, LDF и tempdb после запуска потребует дополнительных операций и окна обслуживания.
Установите только нужные компоненты и разделите учётные записи
Сначала обновите Windows, затем устанавливайте SQL Server. Именно такой порядок указан в руководстве IP-Way.
Для базы 1С нужен компонент Database Engine Services. Службы SQL Server запускайте под отдельными учётными записями и оставьте им лишь необходимые права. Эту схему рекомендуют IP-Way и руководство ITAT по SQL Server для 1С.
Платформе 1С не нужна служебная учётная запись SQL Server. Создайте отдельный логин, привяжите его к рабочей базе и выдайте права только внутри неё. Руководство ITAT указывает для такого пользователя роль db_owner.
Не подключайте 1С через sa. ITAT советует назначить этому логину сложный пароль, а после создания отдельных учётных записей отключить его.
Подготовка операционной системы и выбор компонентов разобраны в схеме развёртывания Windows Server, SQL Server и платформы.
Ограничьте память SQL Server до запуска пользователей
Если предел не задан, SQL Server может забрать большую часть доступной RAM. Параметр max server memory ограничивает память, которую Database Engine тратит на внутренние задачи. Такое описание приводит IP-Way.
Возьмём выделенный сервер с 64 ГБ RAM. По допущению из руководства Fast1C оставим операционной системе 8 ГБ:
64 ГБ − 8 ГБ = 56 ГБ
Значение для SQL Server задаётся в мегабайтах:
56 × 1024 = 57 344 МБ
Для этого примера стартовый max server memory равен 57 344 МБ. Число относится к выделенному SQL Server и не подходит любой машине без пересчёта.
На совмещённом сервере память делят Windows, SQL Server и рабочие процессы 1С. ITAT предлагает оставлять вне SQL Server 30–40% RAM, если обе роли работают на одной машине.
Допустим, серверу выделили 64 ГБ RAM. При резерве 40% расчёт будет таким:
64 × 0,60 = 38,4 ГБ
Для стартовой настройки округлим результат вниз до 38 ГБ:
38 × 1024 = 38 912 МБ
Это верхняя отправная точка для SQL Server. После запуска посмотрите, сколько памяти забирают Windows и процессы 1С. Если оставшегося объёма им не хватает, уменьшите предел SQL Server либо разделите роли.
Выберите модель восстановления до первой рабочей операции
Каждая новая база наследует модель восстановления от системной базы model. В разборе конфигурации SQL Server на Хабре указано, что model по умолчанию работает в Full. Значит, модель новой базы нужно проверять явно.
В Simple SQL Server освобождает использованное место журнала после контрольной точки. В Full транзакции остаются в журнале, пока тот не попадёт в резервную копию. Эти различия описаны в том же разборе на Хабре.
Full нужна, если базу требуется возвращать к выбранному моменту. Копирование журнала в таком случае настройте до запуска пользователей. Иначе LDF продолжит расти и может заполнить том. Об этом предупреждают Хабр, IP-Way и руководство ITAT.
Simple убирает обязанность копировать журнал, но не отменяет резервные копии базы. Модель выбирают по допустимой потере данных, а не по объёму свободного места.
Требование лучше записать до установки:
- если достаточно последней полной или разностной копии, выбирайте Simple;
- если нужно вернуться ближе к моменту перед ошибкой или сбоем, выбирайте Full и копируйте журнал;
- если требование ещё не сформулировано, не оставляйте Full только потому, что база унаследовала её от
model.
В режиме Full мало один раз создать задание SQL Server Agent. Проверяйте его выполнение, срок хранения копий и целостность всей последовательности.
Настройте фиксированный рост файлов
Процентный прирост зависит от текущего размера файла. База растёт — вместе с ней увеличивается каждый следующий шаг расширения. IP-Way и Fast1C советуют задавать прирост в мегабайтах.
Для файлов данных Fast1C приводит стартовый прирост 1024 МБ. Для журнала — 512 МБ. Это исходные настройки: позднее их нужно сверить с темпом роста вашей базы.
Не сжимайте рабочие файлы по расписанию. После сжатия нагрузка снова расширит файл. Fast1C связывает AUTO_SHRINK с фрагментацией индексов и рекомендует отключать этот параметр.
| Параметр | Стартовое значение для примера | Когда пересматривать |
|---|---|---|
max server memory | 57 344 МБ при 64 ГБ RAM на выделенном SQL Server | После изменения RAM или переноса ролей |
Файлы данных tempdb | По одному на логическое ядро, но не больше восьми | При конкуренции за страницы распределения |
Размер файла данных tempdb | 1024 МБ | Если файлы растут при обычной дневной нагрузке |
Прирост файла tempdb | 512 МБ фиксированно | Если расширения происходят слишком часто |
| Прирост MDF/NDF | 1024 МБ фиксированно | При изменении темпа роста рабочей базы |
| Прирост LDF | 512 МБ фиксированно | После анализа частоты расширений и копий журнала |
| Модель восстановления | Simple либо Full по требуемой точке возврата | При изменении требований к потере данных |
Это стартовые значения. Наблюдение за памятью, файлами и заданиями копирования они не заменяют.
Подготовьте tempdb под число логических ядер
Fast1C предлагает начинать с одного файла данных tempdb на логическое ядро, но ограничить число файлов восемью. Размер и прирост у всех файлов должны совпадать.
Для сервера с восемью логическими ядрами расчёт выглядит так:
min(8 ядер, 8) = 8 файлов
Если каждому файлу выделить по 1 ГБ, суммарный начальный объём составит:
8 × 1 ГБ = 8 ГБ
Для каждого файла задайте фиксированный прирост 512 МБ. Эти исходные значения приводит руководство Fast1C.
На четырёх логических ядрах начните с четырёх одинаковых файлов. Если ядер больше восьми — с восьми. Добавлять файлы после каждого расширения процессора не нужно.
Начального размера должно хватать для обычной нагрузки без постоянного автоматического роста. IP-Way советует подбирать его по рабочей нагрузке. После запуска проверьте историю расширений файлов.
Разместите tempdb отдельно от рабочей базы и её журнала. Разница проявится при операциях с временными объектами и версиями строк.
Проверьте базу через рабочий сценарий
Запущенная служба подтверждает лишь то, что процесс SQL Server работает. Она не проверяет права пользователя 1С, сетевое подключение и пригодность резервной копии.
Создайте клиент-серверную базу и подключите её через отдельный логин. ITAT рекомендует использовать TCP и статический порт SQL Server. Точный порядок регистрации базы и проверки сеанса вынесен в отдельную инструкцию.
После первого входа повторите типовую операцию вашей конфигурации. Откройте форму, запишите тестовый объект, сформируйте короткий отчёт. Затем в согласованное окно перезапустите службы и выполните тот же сценарий ещё раз.
Для сравнения нужна одна и та же операция. IP-Way рекомендует проверять изменения SQL Server на одинаковой рабочей нагрузке. Иначе в замер попадут разные запросы, а результат ничего не покажет.
Завершите проверку резервным копированием и восстановлением в отдельную базу. IP-Way советует регулярно проверять копии тестовым восстановлением. Сам по себе файл .bak ещё не доказывает, что база из него вернётся.
Разверните копию под другим именем и задайте отдельные пути к MDF и LDF. Откройте восстановленную базу, выполните проверочный запрос и запишите длительность процедуры.
Расписание, контроль заданий и проверка последовательности копий описаны в регламенте резервного копирования базы на SQL Server.
Стартовая схема для небольшой компании
Исходные данные примера: выделенный SQL Server, 64 ГБ RAM и восемь логических ядер. Операционной системе оставляем 8 ГБ. В max server memory записываем 57 344 МБ.
Для tempdb создаём восемь одинаковых файлов данных по 1 ГБ. Каждый растёт фиксированными блоками по 512 МБ. Прирост MDF/NDF задаём по 1024 МБ, LDF — по 512 МБ.
Данные, журнал, tempdb и резервные копии разводим по хранилищам. Итоговые копии отправляем за пределы рабочего сервера.
Модель восстановления выбираем по допустимой потере данных. Для Full сразу запускаем копирование журнала. Для Simple настраиваем полные копии и всё равно проверяем восстановление.
Перед передачей сервера пользователям проверьте пять пунктов:
max server memoryоставляет достаточно памяти Windows и другим процессам.- MDF, LDF,
tempdbи копии лежат по утверждённой схеме. - Модель восстановления совпадает с расписанием копирования.
- База открывается через отдельный логин, а не через
sa. - Свежая копия восстанавливается в отдельную проверочную базу.
Если SQL Server уже спорит с процессами 1С за ресурсы, чужой набор параметров не спасёт. Разделите роли или закажите расчёт серверной схемы по нагрузке вашей базы.