Due cose che vorrei sapere:
- come si sposta in modo sicuro tempdb con tempi di inattività minimi?
- di quanti file tempdb hai bisogno?
È 1 file per core? Quindi quad-core = 4 file tempdb, creando tre nuovi?
Due cose che vorrei sapere:
È 1 file per core? Quindi quad-core = 4 file tempdb, creando tre nuovi?
Risposte:
Per spostare i tempdb
file, devi semplicemente fare quanto segue:
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
Se vuoi aggiungere un nuovo file a tempdb
, devi semplicemente fare quanto segue (a condizione che tu voglia aggiungerlo al PRIMARY
filegroup o crearne uno tuo):
alter database tempdb
add file
(
name = tempdb2,
filename = 'C:\YourNewTempdbDir\Tempdb2.ndf'
)
go
Per rendere effettive queste modifiche, è necessario riavviare il servizio SQL Server. Per quanto riguarda la riduzione al minimo dei tempi di inattività, si è vincolati alla quantità di tempo necessaria per il riavvio del servizio . Non devi preoccuparti di spostare i tempdb
file di database preesistenti , poiché SQL Server ricrea sempre i file e i nuovi percorsi / file verranno creati all'avvio del servizio.
Per quanto riguarda il "1 file di dati tempdb per core", questo è in gran parte un mito. L'approccio corretto è quello di monitorare la tempdb
contesa di file per le pagine Page Free Space (PFS), Global Allocation Map (GAM) e Shared Global Allocation Map (SGAM). Si prega di fare riferimento a questo articolo per ottenere una query (collegamento alternativo) che guarda attraverso il sys.dm_os_waiting_tasks
DMV per vedere quantotempdb
contesa di file c'è. Quindi è necessario uscire da questo, anziché limitarsi a coprire tempdb
con la stessa quantità di file in quanto sono presenti core. È l'approccio più consigliabile.
Per spostare tempdb, eseguire:
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
Quindi riavviare il servizio SQL Server (MSSQLServer).
Numero di file in tempdb - vedi l'articolo di Paul Randall: Un mito DBA di SQL Server al giorno: (12/30) tempdb dovrebbe sempre avere un file di dati per core del processore
Dal consiglio di Microsoft :
Come regola generale, se il numero di processori logici è inferiore o uguale a 8, utilizzare lo stesso numero di file di dati dei processori logici.
Se il numero di processori logici è maggiore di 8, utilizzare 8 file di dati e quindi se la contesa continua, aumentare il numero di file di dati di multipli di 4 (fino al numero di processori logici) fino a quando la contesa non viene ridotta a livelli accettabili o modifiche al carico di lavoro / al codice.
Lo spostamento dei file TempDB è un processo in 2 passaggi:
SQL Server
servizio affinché la modifica abbia effetto (questo è il tempo di inattività minimo necessario)Per dire a SQL dove creare i nuovi file TempDB, è possibile utilizzare:
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];
Ciò genererà le istruzioni T-SQL che è necessario eseguire per spostare i file nel nuovo drive:\folder
desiderato. (clicca sull'immagine per ingrandirla)
Dopo aver eseguito le istruzioni mobili, è possibile eseguire nuovamente la query sopra per verificare che la Current Location
colonna mostri ora la nuovadrive:\folder
.
Quando sei soddisfatto delle modifiche, riavvia il servizio SQL Server .