В процессе эксплуатации высоконагруженных систем на базе 1С:Предприятие 8 администраторы часто сталкиваются с проблемой нехватки свободного места на системном диске. Одной из главных причин этого является рост базы TempDB. Эта база данных используется SQL-сервером для хранения временных таблиц, создаваемых платформой 1С, а также для выполнения сложных запросов с использованием операторов GROUP BY, DISTINCT и UNION. Рассмотрим подробнее, как корректно переместить системные базы данных на другой физический диск или раздел, не прибегая к переустановке экземпляра MS SQL Server.
База tempdb пересоздается при каждом запуске службы SQL Server, поэтому физически копировать её файлы между дисками при выключенном сервере не требуется — достаточно указать серверу новые пути. Проанализируем последовательность действий.
tempdb. Для этого откроем SQL Server Management Studio (SSMS) и выполним следующий запрос:
USE tempdb
GO
EXEC sp_helpfile
GO
name (обычно это tempdev и templog) и колонку filename с текущим путем.ALTER DATABASE. Важно понимать, что эта команда не перемещает файлы мгновенно, а лишь записывает новые пути в базу master.
USE master
GO
ALTER DATABASE tempdb MODIFY FILE (NAME = tempdev, FILENAME = 'D:\SQLData\tempdb.mdf')
GO
ALTER DATABASE tempdb MODIFY FILE (NAME = templog, FILENAME = 'D:\SQLLogs\templog.ldf')
GO
D:\SQLData\ — это путь к новому скоростному накопителю, который мы подготовили.MSSQLSERVER через оснастку "Службы" или SQL Server Configuration Manager. При старте сервер обнаружит новые пути и создаст по ним чистые файлы базы tempdb.
SELECT name, physical_name AS CurrentLocation, state_desc
FROM sys.master_files
WHERE database_id = DB_ID(N'tempdb');
Важный нюанс: Старые файлы базы tempdb.mdf и templog.ldf на диске C: не удалятся автоматически. После успешного запуска сервера их нужно удалить вручную, чтобы освободить место.
Перенос базы master сложнее, так как именно в ней хранятся пути ко всем остальным базам. Если сервер не найдет master, он просто не запустится. Разберем этот процесс по шагам.
-d (путь к файлу данных) и -l (путь к логу транзакций).master.mdf и mastlog.ldf из старого расположения в новое. Это критически важно, так как в отличие от tempdb, данные master должны сохраняться.Просто перенести файлы часто недостаточно для достижения максимальной производительности. Проанализируем современные рекомендации по настройке tempdb специально для систем 1С.
Количество файлов данных. Рассмотрим ситуацию: в системе 1С одновременно работают сотни пользователей, постоянно создавая временные таблицы. Это может привести к конкуренции за ресурсы (PAGELATCH). Рекомендуется разделять tempdb на несколько файлов данных (ndf).
Правило: создаем количество файлов, равное количеству логических ядер процессора, но не более 8. Если ядер 16, начните с 8 файлов. Все файлы должны иметь одинаковый начальный размер и одинаковый шаг прироста (Autogrowth).
Настройка авторасширения (Autogrowth). Стандартная настройка "прирост на 10%" является крайне неэффективной. Выясним причину: если база весит 100 Гб, то при очередном расширении SQL Server попытается выделить сразу 10 Гб, что вызовет "замирание" всех операций 1С.
Рекомендация: установите фиксированный шаг прироста, например, 256 MB или 512 MB.
Мгновенная инициализация файлов (IFI). Посмотрим на важный параметр безопасности. По умолчанию SQL Server при создании или расширении файла заполняет его нулями. Это замедляет процесс. Мы можем включить мгновенную инициализацию, предоставив учетной записи службы SQL Server право "Perform volume maintenance tasks" (Выполнение задач по обслуживанию томов) в локальных политиках безопасности Windows (secpol.msc).
Использование Memory-Optimized Metadata. Начиная с версии SQL Server 2019, мы можем перенести метаданные tempdb в память. Для 1С это дает колоссальный прирост скорости при интенсивной работе с временными таблицами. Выполним следующую команду:
ALTER SERVER CONFIGURATION SET MEMORY_OPTIMIZED TEMPDB_METADATA = ON;
Для активации потребуется перезапуск сервера.
Одной из самых частых ошибок является отсутствие прав доступа. Когда вы создаете новую папку на диске D: или E:, служба SQL Server (работающая, например, под учетной записью NT Service\MSSQLSERVER) может не иметь прав на запись в этот каталог. В результате после перезагрузки сервер не запустится, а в журнале событий Windows появится ошибка "Access Denied". Всегда проверяйте, что у пользователя службы есть полный доступ (Full Control) к новой папке с базами данных.
Также не забывайте про флаги трассировки для старых версий (до 2016). Для корректной работы 1С рекомендуется включать флаги T1117 (равномерное расширение всех файлов в группе) и T1118 (выделение полных экстентов). В SQL Server 2016 и выше эти механизмы уже встроены в ядро и не требуют ручного включения.
Соблюдение этих инструкций позволит вам не только освободить место на системном диске, но и значительно ускорить работу 1С:Предприятия за счет оптимизации дисковой подсистемы SQL Server.