Безопасное перемещение и создание новых файлов tempdb

21

Две вещи, которые я хотел бы знать:

  • как безопасно перемещать базу данных с минимальным временем простоя?
  • сколько файлов tempdb вам нужно?

Это 1 файл на ядро? Итак, quad-core = 4 файла tempdb, создаете три новых?

Стюарт Блэклер
источник

Ответы:

22

Для перемещения tempdbфайлов вам просто нужно сделать следующее:

alter database tempdb
modify file
(
    name = tempdev,
    filename = 'C:\YourNewTempdbDir\tempdb.mdf'
)
go

alter database tempdb
modify file
(
    name = templog,
    filename = 'C:\YourNewTempdbDir\templog.ldf'
)
go

Если вы хотите добавить новый файл tempdb, вам просто нужно сделать следующее (при условии, что вы хотите добавить его в PRIMARYфайловую группу или создать свой собственный):

alter database tempdb
add file
(
    name = tempdb2,
    filename = 'C:\YourNewTempdbDir\Tempdb2.ndf'
)
go

Чтобы эти изменения вступили в силу, вам необходимо перезапустить службу SQL Server. Таким образом, что касается минимизации времени простоя, вы ограничены количеством времени, которое потребуется для перезапуска службы . Вам не нужно беспокоиться о перемещении уже существующих tempdbфайлов базы данных, поскольку SQL Server всегда воссоздает файлы, и новые местоположения / файлы будут создаваться при запуске службы.

Что касается «1 файла данных tempdb на ядро», это в значительной степени миф. Правильный подход состоит в том, чтобы отслеживать tempdbконфликты файлов на страницах «Свободное пространство страниц» (PFS), «Карта глобального распределения» (GAM) и «Общая карта глобального распределения» (SGAM). Пожалуйста, обратитесь к этой статье, чтобы получить запрос (альтернативная ссылка), который просматривает sys.dm_os_waiting_tasksDMV, чтобы увидеть, как много tempdbконфликтов файлов. Тогда вам нужно отказаться от этого, вместо того, чтобы просто покрывать tempdbтем же количеством файлов, что и ядра. Это более рекомендуемый подход.

Томас Стрингер
источник
8
  1. Чтобы переместить tempdb, выполните:

    ALTER DATABASE tempdb 
    MODIFY FILE ( name=tempdev, filename='D:\Newpath\tempdb.mdf') 
    GO
    ALTER DATABASE tempdb 
    MODIFY FILE ( name=templog, filename='D:\Newpath\templog.ldf') 
    GO

    Затем перезапустите службу SQL Server (MSSQLServer).

  2. Количество файлов в базе данных tempdb - см. Статью Пола Рэндалла: миф о администраторах баз данных SQL Server в день: (12/30) база данных tempdb всегда должна иметь один файл данных на ядро ​​процессора

jl01
источник
4

Из совета Microsoft :

Как правило, если число логических процессоров меньше или равно 8, используйте то же количество файлов данных, что и логических процессоров.

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

Перемещение файлов TempDB является двухэтапным процессом:

  1. Сообщите SQL, куда вы хотите, чтобы ваши новые файлы TempDB шли (без простоя)
  2. Перезапуск на SQL Serverслужбу для изменения вступили в силу (это минимальное время простоя вам нужно)

Чтобы сообщить SQL, где создавать новые файлы TempDB, вы можете использовать:

DECLARE @newDriveAndFolder VARCHAR(8000);

SET @newDriveAndFolder = 'Z:\YourTempDBfolder';

SELECT [name] AS [Logical Name]
    ,physical_name AS [Current Location]
    ,state_desc AS [Status]
    ,size / 128 AS [Size(MB)] --Number of 8KB pages / 128 = MB
    ,'ALTER DATABASE tempdb MODIFY FILE (NAME = ' + QUOTENAME(f.[name])
    + CHAR(9) /* Tab */
    + ',FILENAME = ''' + @newDriveAndFolder + CHAR(92) /* Backslash */ + f.[name]
    + CASE WHEN f.[type] = 1 /* Log */ THEN '.ldf' ELSE '.mdf' END  + ''''
    + ');'
    AS [Create new TempDB files]
FROM sys.master_files f
WHERE f.database_id = DB_ID(N'tempdb')
ORDER BY f.[type];

Это сгенерирует операторы T-SQL, которые вам нужно выполнить, чтобы переместить файлы в новое, которое drive:\folderвы хотите. (нажмите на изображение, чтобы увеличить)

Изображение, показывающее 2 строки с подробной информацией о файлах TempDB и инструкциях T-SQL для их перемещения

После того, как вы запустили свои операторы перемещения, вы можете снова выполнить приведенный выше запрос, чтобы убедиться, что в Current Locationстолбце теперь отображаются новые drive:\folder.

Изображение, показывающее новые местоположения файлов TempDB

Когда вы будете довольны своими изменениями, перезапустите службу SQL Server .

Oreo
источник