Две вещи, которые я хотел бы знать:
- как безопасно перемещать базу данных с минимальным временем простоя?
- сколько файлов tempdb вам нужно?
Это 1 файл на ядро? Итак, quad-core = 4 файла tempdb, создаете три новых?
Две вещи, которые я хотел бы знать:
Это 1 файл на ядро? Итак, quad-core = 4 файла tempdb, создаете три новых?
Ответы:
Для перемещения 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_tasks
DMV, чтобы увидеть, как много tempdb
конфликтов файлов. Тогда вам нужно отказаться от этого, вместо того, чтобы просто покрывать tempdb
тем же количеством файлов, что и ядра. Это более рекомендуемый подход.
Чтобы переместить 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).
Количество файлов в базе данных tempdb - см. Статью Пола Рэндалла: миф о администраторах баз данных SQL Server в день: (12/30) база данных tempdb всегда должна иметь один файл данных на ядро процессора
Из совета Microsoft :
Как правило, если число логических процессоров меньше или равно 8, используйте то же количество файлов данных, что и логических процессоров.
Если число логических процессоров превышает 8, используйте 8 файлов данных, а затем, если конфликт продолжается, увеличьте количество файлов данных в несколько раз (до количества логических процессоров), пока конфликт не уменьшится до приемлемых уровней или не составит изменения в рабочей нагрузке / коде.
Перемещение файлов TempDB является двухэтапным процессом:
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
вы хотите. (нажмите на изображение, чтобы увеличить)
После того, как вы запустили свои операторы перемещения, вы можете снова выполнить приведенный выше запрос, чтобы убедиться, что в Current Location
столбце теперь отображаются новые drive:\folder
.
Когда вы будете довольны своими изменениями, перезапустите службу SQL Server .