Как перенести TempDB и другие системные базы данных MS SQL Server на другой диск без переустановки

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

В процессе эксплуатации высоконагруженных систем на базе 1С:Предприятие 8 администраторы часто сталкиваются с проблемой нехватки свободного места на системном диске. Одной из главных причин этого является рост базы TempDB. Эта база данных используется SQL-сервером для хранения временных таблиц, создаваемых платформой 1С, а также для выполнения сложных запросов с использованием операторов GROUP BY, DISTINCT и UNION. Рассмотрим подробнее, как корректно переместить системные базы данных на другой физический диск или раздел, не прибегая к переустановке экземпляра MS SQL Server.

Разберем процедуру перемещения базы данных TempDB

База tempdb пересоздается при каждом запуске службы SQL Server, поэтому физически копировать её файлы между дисками при выключенном сервере не требуется — достаточно указать серверу новые пути. Проанализируем последовательность действий.

  1. Определим текущие логические имена и пути к файлам. Прежде всего нам необходимо узнать, как называются логические файлы базы tempdb. Для этого откроем SQL Server Management Studio (SSMS) и выполним следующий запрос:
    
    USE tempdb
    GO
    EXEC sp_helpfile
    GO
    
    В результате мы увидим колонку name (обычно это tempdev и templog) и колонку filename с текущим путем.
  2. Изменим настройки расположения файлов в системном каталоге. Теперь воспользуемся командой 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\ — это путь к новому скоростному накопителю, который мы подготовили.
  3. Перезапустим службу SQL Server. Для того чтобы изменения вступили в силу, необходимо перезапустить службу MSSQLSERVER через оснастку "Службы" или SQL Server Configuration Manager. При старте сервер обнаружит новые пути и создаст по ним чистые файлы базы tempdb.
  4. Проверим результат. После перезапуска убедимся, что база создана в нужном месте, выполнив:
    
    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 сложнее, так как именно в ней хранятся пути ко всем остальным базам. Если сервер не найдет master, он просто не запустится. Разберем этот процесс по шагам.

  1. Откроем SQL Server Configuration Manager и перейдем к свойствам службы SQL Server.
  2. На вкладке Startup Parameters (Параметры запуска) мы увидим параметры, начинающиеся на -d (путь к файлу данных) и -l (путь к логу транзакций).
  3. Изменим значения параметров на новые пути. Например: -dE:\SQLData\master.mdf -lE:\SQLData\mastlog.ldf
  4. Остановим службу SQL Server.
  5. Вручную скопируем файлы master.mdf и mastlog.ldf из старого расположения в новое. Это критически важно, так как в отличие от tempdb, данные master должны сохраняться.
  6. Запустим службу.

Оптимизация TempDB для работы с 1С:Предприятие 8

Просто перенести файлы часто недостаточно для достижения максимальной производительности. Проанализируем современные рекомендации по настройке 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.

← На главную