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?
Dos cosas que me gustaría saber:
¿Es 1 archivo por núcleo? Entonces, ¿cuatro núcleos = 4 archivos tempdb, creando tres nuevos?
Respuestas:
Para mover tempdb
archivos, 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 PRIMARY
archivos 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 tempdb
archivos 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 tempdb
la 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_tasks
DMV para ver cuánta tempdb
contención de archivos hay. Luego, debe salirse de esto, en lugar de simplemente cubrir tempdb
con la misma cantidad de archivos que hay núcleos. Es el enfoque más aconsejable.
Para mover tempdb, ejecute:
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
Luego, reinicie su Servicio SQL Server (MSSQLServer).
Número de archivos en tempdb: consulte el artículo de Paul Randall: Un mito del DBA de SQL Server por día: (30/12) tempdb siempre debe tener un archivo de datos por núcleo de procesador
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:
SQL Server
servicio 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:\folder
que desea. (haga clic en la imagen para agrandarla)
Cuando haya ejecutado sus declaraciones móviles, puede ejecutar la consulta anterior nuevamente, para verificar que la Current Location
columna ahora muestre su nueva drive:\folder
.
Una vez que esté satisfecho con sus cambios, reinicie el servicio SQL Server .