Mover y crear nuevos archivos tempdb de forma segura

21

Dos cosas que me gustaría saber:

  • ¿Cómo mueves tempdb de forma segura con un tiempo de inactividad mínimo?
  • ¿Cuántos archivos tempdb necesitas?

¿Es 1 archivo por núcleo? Entonces, ¿cuatro núcleos = 4 archivos tempdb, creando tres nuevos?

Stuart Blackler
fuente

Respuestas:

22

Para mover tempdbarchivos, simplemente necesita hacer lo siguiente:

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

Si desea agregar un nuevo archivo tempdb, simplemente tiene que hacer lo siguiente (siempre que desee agregarlo al grupo de PRIMARYarchivos o crear el suyo propio):

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

Para que estos cambios surtan efecto, deberá reiniciar el servicio SQL Server. Entonces, en lo que respecta a minimizar el tiempo de inactividad, está limitado a la cantidad de tiempo que llevará el reinicio del servicio . No tiene que preocuparse por mover los tempdbarchivos de base de datos preexistentes , ya que SQL Server siempre recrea los archivos y las nuevas ubicaciones / archivos se crearán al iniciar el servicio.

En cuanto al "1 archivo de datos tempdb por núcleo", eso es en gran parte un mito. El enfoque correcto es monitorear tempdbla contención de archivos para el espacio de página libre (PFS), el mapa de asignación global (GAM) y las páginas del mapa de asignación global compartida (SGAM). Consulte este artículo para obtener una consulta (enlace alternativo) que revise el sys.dm_os_waiting_tasksDMV para ver cuánta tempdbcontención de archivos hay. Luego, debe salirse de esto, en lugar de simplemente cubrir tempdbcon la misma cantidad de archivos que hay núcleos. Es el enfoque más aconsejable.

Thomas Stringer
fuente
4

Del consejo de Microsoft :

Como regla general, si el número de procesadores lógicos es menor o igual a 8, use el mismo número de archivos de datos que los procesadores lógicos.

Si el número de procesadores lógicos es mayor que 8, use 8 archivos de datos y luego, si la contienda continúa, aumente el número de archivos de datos en múltiplos de 4 (hasta el número de procesadores lógicos) hasta que la contención se reduzca a niveles aceptables o haga cambios en la carga de trabajo / código.

Mover los archivos TempDB es un proceso de 2 pasos:

  1. Indique a SQL dónde desea que vayan sus nuevos archivos TempDB (esto no tiene tiempo de inactividad)
  2. Reinicie el SQL Serverservicio para que el cambio surta efecto (este es el tiempo de inactividad mínimo que necesita)

Para indicarle a SQL dónde crear los nuevos archivos TempDB, puede usar:

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];

Esto generará las declaraciones T-SQL que necesita ejecutar para mover los archivos al nuevo drive:\folderque desea. (haga clic en la imagen para agrandarla)

Imagen que muestra 2 filas con detalles sobre archivos TempDB y sentencias T-SQL para moverlos

Cuando haya ejecutado sus declaraciones móviles, puede ejecutar la consulta anterior nuevamente, para verificar que la Current Locationcolumna ahora muestre su nueva drive:\folder.

Imagen que muestra las nuevas ubicaciones de los archivos TempDB

Una vez que esté satisfecho con sus cambios, reinicie el servicio SQL Server .

Oreo
fuente