
MS SQL 2019 при эксплуатации с 1С демонстрирует высокую чувствительность к конфигурации памяти и индексации таблиц. Для баз объемом от 500 ГБ рекомендуется установить max server memory на уровне 70–75% от общей оперативной памяти сервера, оставляя не менее 25% для ОС и фоновых процессов.
Оптимизация запросов через индексы с включением (included columns) снижает нагрузку на I/O при выборках более чем из 20 столбцов. Особое внимание стоит уделить кластерным индексам на регистрах накопления и документах, так как их перестроение каждые 1–2 недели уменьшает фрагментацию и ускоряет выборки до 40%.
Для уменьшения блокировок и повышения параллелизма рекомендуется включить OPTIMIZE FOR UNKNOWN в часто используемых хранимых процедурах и контролировать MAXDOP на уровне 4–6, особенно при серверах с более чем 8 ядрами. Эти настройки обеспечивают равномерное распределение нагрузки при массовых проводках и отчетах.
Регулярное использование DBCC SHOWCONTIG и UPDATE STATISTICS с опцией FULLSCAN позволяет поддерживать актуальные статистики и уменьшает ошибки планировщика запросов. В крупных базах 1С это снижает время выполнения сложных JOIN до 30–50%, особенно при отчетах с фильтрацией по датам.
Наконец, правильная настройка tempdb на отдельный SSD с количеством файлов, равным числу ядер (но не менее 8), снижает блокировки при массовых вставках и уменьшает время выполнения фоновых операций синхронизации 1С.
Настройка параметров памяти и максимального использования CPU для 1С

Для оптимальной работы 1С на MS SQL 2019 важно корректно настроить параметры памяти и CPU. Начнем с памяти:
1. Память
Рекомендуется выделять SQL Server минимум 70% доступной оперативной памяти на сервере, если на том же сервере нет других критических служб. Параметры конфигурации:
| Параметр | Рекомендованное значение | Комментарий |
|---|---|---|
| max server memory (MB) | 70–80% от общей RAM | Ограничивает SQL Server, чтобы оставалась память для ОС и 1С |
| min server memory (MB) | 50–60% от общей RAM | Позволяет SQL не сбрасывать кеш при высокой нагрузке |
| Optimize for Ad hoc Workloads | 1 (включено) | Снижает потребление памяти для одноразовых запросов 1С |
Для 1С важен размер буферного кеша, который должен покрывать объем активных данных. Для базы ~100 ГБ рекомендуется установить max server memory на уровне 64–72 ГБ, если сервер имеет 96 ГБ RAM.
2. CPU
Для многопользовательских конфигураций 1С нагрузка распределяется по ядрам SQL Server. Настройки:
| Параметр | Рекомендованное значение | Комментарий |
|---|---|---|
| max degree of parallelism (MAXDOP) | 4–8 | Оптимально для OLTP-нагрузки 1С; количество зависит от числа физических ядер |
| Cost Threshold for Parallelism | 50–100 | Увеличение снижает лишние параллельные потоки для небольших запросов 1С |
| Processor Affinity | По умолчанию | Менять только при наличии конфликтов с другими службами |
Важно контролировать загрузку CPU в пиковые часы. Если нагрузка превышает 80–85% на постоянной основе, необходимо перераспределять задачи SQL и увеличивать MAXDOP только для тяжелых отчетов.
Дополнительно рекомендуется включить Resource Governor для ограничения использования CPU отдельными группами процессов 1С, чтобы интерактивные пользователи не блокировались тяжелыми отчетами.
Оптимизация индексов таблиц и перестройка фрагментированных индексов
Для повышения производительности MS SQL 2019 в 1С критически важно контролировать состояние индексов. Фрагментация индексов приводит к увеличению времени выборки и обновления данных. Проверку фрагментации можно выполнить с помощью запроса:
SELECT
OBJECT_NAME(OBJECT_ID) AS TableName,
name AS IndexName,
avg_fragmentation_in_percent
FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'LIMITED')
WHERE avg_fragmentation_in_percent > 10;
При уровне фрагментации 10–30% рекомендуется выполнять реорганизацию индекса с помощью команды ALTER INDEX ... REORGANIZE. Это упорядочивает страницы данных без полной блокировки таблицы. Для фрагментации свыше 30% эффективнее использовать перестройку индекса через ALTER INDEX ... REBUILD, которая пересоздает структуру индекса и обновляет статистику.
Для крупных таблиц 1С с миллионами записей перестройка индексов должна выполняться с включением опции ONLINE = ON, чтобы минимизировать блокировки пользователей:
ALTER INDEX [IndexName] ON [TableName] REBUILD WITH (ONLINE = ON);
Регулярный мониторинг индексов позволяет выявлять редко используемые и дублирующие индексы, которые увеличивают нагрузку на записи. Для анализа эффективности индексов используется представление sys.dm_db_index_usage_stats. Удаление или объединение неэффективных индексов снижает накладные расходы на вставку и обновление данных.
Оптимизация должна сопровождаться обновлением статистики таблиц через UPDATE STATISTICS [TableName] для корректного построения планов выполнения запросов. В сочетании с перестройкой индексов это обеспечивает сокращение времени выборок и стабилизацию отклика 1С при интенсивной нагрузке.
Настройка параметров автосохранения и журналов транзакций

Для баз 1С на MS SQL 2019 критически важно контролировать автосохранение и работу журналов транзакций. По умолчанию recovery model установлена в FULL, что обеспечивает полное восстановление, но быстро увеличивает размер журнала транзакций. Для интенсивной работы 1С рекомендуется использовать SIMPLE на временных или справочных базах, где не требуется точное восстановление на момент сбоя.
Период автосохранения (Auto Shrink и Auto Close) лучше отключить. Auto Shrink приводит к фрагментации файлов данных и логов, Auto Close замедляет повторное открытие базы после каждой операции. Управление размером журналов следует вести вручную: для активных баз лог транзакций желательно ограничивать initial size 1–2 ГБ с autogrowth на 256–512 МБ, чтобы избежать частых расширений.
Регулярное резервное копирование журнала транзакций позволяет поддерживать размер логов в пределах заданных лимитов. Для 1С рекомендуется создавать transaction log backup каждые 30–60 минут при высоком объеме транзакций. В сочетании с CHECKPOINT и DBCC SHRINKFILE это позволяет уменьшить вероятность переполнения лога без потери данных.
Для больших информационных баз 1С стоит настроить instant file initialization на уровне сервера. Это ускоряет создание и расширение файлов данных, минимизируя влияние на производительность при росте журнала транзакций.
Мониторинг активности журналов транзакций через sys.dm_db_log_space_usage позволяет отслеживать текущую нагрузку и принимать решение о частоте резервного копирования и корректировке автогроста. Оптимальная конфигурация снижает задержки при массовой обработке документов и ускоряет отклик клиентских приложений 1С.
Использование планов выполнения запросов для поиска узких мест
Планы выполнения запросов в MS SQL 2019 позволяют анализировать фактический путь обработки данных и выявлять операции с наибольшей нагрузкой. В 1С это критично, так как медленные запросы к крупным таблицам напрямую влияют на отклик системы.
Основные шаги анализа:
- Включение отображения плана выполнения:
SET STATISTICS XML ONили через SQL Server Management Studio (SSMS) – кнопка «Include Actual Execution Plan». - Исполнение проблемного запроса и сохранение XML-плана.
- Анализ узких мест по ключевым метрикам:
- EstimatedRows / ActualRows – выявление переоценки количества строк.
- Clustered/NonClustered Index Scan – частые полные сканирования больших таблиц.
- Hash Match / Sort – дорогостоящие операции соединения и сортировки.
Рекомендации по оптимизации:
- Создание или корректировка индексов для полей, участвующих в фильтрах и соединениях.
- Замена
SELECT *на выбор конкретных колонок. - Переписывание сложных подзапросов через
JOINс фильтрацией на уровне SQL. - Использование
OPTION (RECOMPILE)для динамических параметризованных запросов, если план постоянно неэффективен. - Разбиение больших операций на батчи через
TOPилиROW_NUMBER()для снижения блокировок.
Важно сопоставлять затраты на операции (Cost %) с фактическими задержками. Высокий процент в плане выполнения не всегда означает проблему, если операция обрабатывает мало строк. Обращение внимания на ActualRows и PhysicalReads позволяет точнее определить узкие места для оптимизации 1С.
Регулярный мониторинг планов выполнения критических запросов позволяет выявлять деградацию после изменения структуры таблиц или роста объема данных, обеспечивая стабильную производительность SQL-сервера для 1С.
Настройка параметров блокировок и уровней изоляции транзакций

Для ускорения работы 1С на MS SQL 2019 важно корректно настроить уровни изоляции транзакций и параметры блокировок. По умолчанию 1С использует уровень READ COMMITTED, что предотвращает «грязное чтение», но может создавать блокировки при массовых операциях записи.
Для снижения блокировок рекомендуется применять опцию READ COMMITTED SNAPSHOT. Включение выполняется командой:
ALTER DATABASE [ИмяБазы] SET READ_COMMITTED_SNAPSHOT ON;
Это позволяет SQL Server использовать версионность данных и минимизировать блокировки при чтении, сохраняя целостность данных.
Для отдельных транзакций с высокой конкуренцией можно использовать уровень SNAPSHOT:
SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
Это уменьшает блокировки при параллельной обработке больших документов и отчетов, но увеличивает использование tempdb. Для 1С рекомендуется контролировать размер tempdb и задавать файл tempdb на отдельном быстром диске.
Также важно корректно настроить параметры блокировок через sp_configure:
EXEC sp_configure 'lock_timeout', 5000;
Это ограничивает время ожидания блокировки до 5 секунд, предотвращая зависание операций. Для крупного документооборота можно увеличить или уменьшить timeout, ориентируясь на тестирование нагрузки.
При частых конфликтах обновлений таблиц больших справочников стоит использовать индексирование по ключевым полям и разбивку больших транзакций на пакеты по 100–500 записей, чтобы уменьшить длительность удержания блокировок.
Мониторинг блокировок выполняется с помощью представлений sys.dm_tran_locks и sys.dm_exec_requests. Регулярный анализ помогает выявлять узкие места и оптимизировать уровень изоляции и размер транзакций.
Распределение больших таблиц по файловым группам и хранение на быстрых дисках
Для ускорения работы MS SQL 2019 с крупными базами 1С критично распределять большие таблицы по отдельным файловым группам и размещать их на быстрых дисках. Оптимизация хранения уменьшает блокировки, повышает параллелизм и снижает время операций выборки и вставки.
Рекомендации по организации:
- Создайте отдельные файловые группы для больших таблиц или таблиц с интенсивной записью:
ALTER DATABASE [ИмяБД] ADD FILEGROUP [FG_ИмяТаблицы]. - Добавьте файлы в файловые группы на быстрые SSD-диски, используя несколько файлов на диск для равномерного распределения I/O:
ALTER DATABASE [ИмяБД] ADD FILE (NAME = N'ИмяФайла', FILENAME = N'D:\SQLData\ИмяФайла.ndf', SIZE = 500MB, MAXSIZE = UNLIMITED, FILEGROWTH = 100MB) TO FILEGROUP [FG_ИмяТаблицы]. - Для индексированных таблиц создавайте отдельные файловые группы под кластеры и некластерные индексы, чтобы операции чтения и записи не пересекались.
- Для таблиц с миллионами строк используйте партицирование по диапазону или хешу с распределением партиций по разным файловым группам, что уменьшает конкуренцию за блокировки.
- Регулярно проверяйте баланс использования дисков командой
DBCC SHOWFILESTATSи при необходимости добавляйте файлы или перемещайте партиции. - Для логов транзакций используйте отдельные физические диски с высокой скоростью записи, чтобы операции INSERT/UPDATE/DELETE не блокировали чтение больших таблиц.
Пример распределения:
- Таблица
Документы– отдельная файловая группаFG_Documentsна SSD. - Индексы таблицы
Документы– файловая группаFG_Documents_Indexesна другом SSD для параллельного доступа. - Партиционирование по дате документа с распределением партиций на несколько файловых групп.
- Файлы логов – отдельный быстрый NVMe-диск для минимизации задержек записи.
Такое распределение сокращает время операций SELECT до 30–50% на больших таблицах, снижает блокировки при массовых вставках и улучшает масштабируемость 1С на MS SQL 2019.
Мониторинг медленных запросов и применение параметров оптимизации для 1С
Для выявления узких мест в производительности 1С на MS SQL 2019 применяются системные представления и инструменты анализа запросов. Основной метод – использование динамических представлений DMVs: sys.dm_exec_query_stats, sys.dm_exec_sql_text и sys.dm_exec_query_plan. Эти представления позволяют определить среднее время выполнения запросов, количество вызовов и потребление CPU.
Для получения списка самых медленных запросов используйте следующий запрос:
SELECT TOP 20
qs.total_elapsed_time / qs.execution_count AS avg_time_ms,
qs.execution_count,
SUBSTRING(st.text, (qs.statement_start_offset/2)+1,
((CASE qs.statement_end_offset WHEN -1 THEN DATALENGTH(st.text) ELSE qs.statement_end_offset END - qs.statement_start_offset)/2)+1) AS query_text,
qp.query_plan
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
ORDER BY avg_time_ms DESC;
Для оптимизации выполнения часто вызываемых медленных запросов рекомендуется использовать индексацию столбцов, участвующих в фильтрах и соединениях. Стандартная практика для 1С – проверка индексного покрытия по полям Ref, Date и Owner. Создание индексного покрытия через INCLUDE минимизирует количество обращений к таблице.
Не менее важна настройка параметров SQL Server для 1С. Оптимизация включает установку MAXDOP = 1 для OLTP-нагрузки, включение Optimize for ad hoc workloads и настройку Cost Threshold for Parallelism на уровне 50–75 для уменьшения накладных расходов на параллельные планы. Эти параметры предотвращают чрезмерное использование CPU при частых коротких запросах.
Регулярно проверяйте фрагментацию индексов с помощью sys.dm_db_index_physical_stats и выполняйте ALTER INDEX … REBUILD/REORGANIZE при фрагментации выше 30%. Важно также контролировать статистику таблиц: обновляйте её командой UPDATE STATISTICS WITH FULLSCAN после массовой загрузки данных.
Использование планов исполнения для анализа медленных запросов позволяет выявлять операторы с высоким потреблением ресурсов, например, Clustered Index Scan или Key Lookup. Замена сканов на seeks через корректные индексы значительно снижает время выполнения. Для 1С критично проверять планы после обновлений конфигурации, так как добавление реквизитов может изменять стратегию выполнения.
Автоматизация мониторинга через SQL Server Agent или встроенные процедуры 1С (ВызватьЗапросКБД) позволяет фиксировать медленные запросы и параметры выполнения, формируя отчёты по ключевым метрикам: время выполнения, количество блокировок, использование памяти и CPU. Такой подход обеспечивает системное выявление проблем и минимизирует ручную диагностику.
Вопрос-ответ:
Какие индексы лучше всего подходят для ускорения запросов 1С в MS SQL 2019?
Для ускорения работы 1С с базой данных важную роль играют правильно подобранные индексы. Чаще всего применяются кластерные индексы для полей, по которым выполняется сортировка и объединение таблиц, а также некластерные индексы для фильтров, часто используемых в отчетах и выборках. Следует избегать создания большого числа ненужных индексов, так как это увеличивает нагрузку на обновление данных. Полезно анализировать медленные запросы с помощью профайлера SQL и создавать индексы только там, где они реально ускоряют обработку.
Как настройка параметров памяти MS SQL влияет на работу 1С?
Память сервера SQL напрямую влияет на скорость обработки запросов и операций с данными 1С. Настройка максимального объема оперативной памяти, выделяемой SQL-серверу, помогает уменьшить обращения к диску. При этом важно оставить часть памяти для операционной системы и других приложений. Кроме того, стоит обратить внимание на конфигурацию буферного пула и планировщика запросов, чтобы сервер эффективнее использовал кеширование и минимизировал блокировки.
Насколько критична фрагментация таблиц для производительности 1С?
Фрагментация таблиц может значительно замедлять выполнение операций, особенно когда база данных активно обновляется. В MS SQL 2019 рекомендуется регулярно проверять уровень фрагментации с помощью системных представлений и при необходимости выполнять реорганизацию или перестройку индексов. Это позволяет оптимизировать хранение данных на диске и ускоряет выборку больших объемов информации.
Как оптимизировать работу отчетов 1С на больших базах данных?
Для ускорения отчетов важно оптимизировать сами запросы 1С, избегая избыточных соединений и большого числа вычисляемых полей. В некоторых случаях полезно создавать специализированные представления или агрегированные таблицы, чтобы сервер выполнял тяжелые вычисления заранее. Также имеет смысл проверять планы выполнения запросов в SQL, чтобы убедиться, что индексы используются правильно, а операции сортировки и группировки не замедляют работу.
Стоит ли включать параметр «оптимизация для Ad Hoc запросов» в MS SQL для 1С?
Включение этой опции помогает сократить использование памяти на хранение планов выполнения одноразовых запросов. Для систем 1С, где часто генерируются уникальные выборки, это может снизить нагрузку на сервер и ускорить работу. Однако эффект будет заметен только на крупных базах данных с большим количеством разных запросов. Настройку стоит тестировать, наблюдая за показателями производительности, чтобы не ухудшить работу повторяющихся операций.
