Spostamento sicuro e creazione di nuovi file tempdb


21

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?

Risposte:


22

Per spostare i tempdbfile, 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 PRIMARYfilegroup 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 tempdbfile 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 tempdbcontesa 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_tasksDMV per vedere quantotempdb contesa di file c'è. Quindi è necessario uscire da questo, anziché limitarsi a coprire tempdbcon la stessa quantità di file in quanto sono presenti core. È l'approccio più consigliabile.



4

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:

  1. Di 'a SQL dove vuoi che vadano i tuoi nuovi file TempDB (questo non ha tempi di inattività)
  2. Ricomincia il SQL Serverservizio 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)

Immagine che mostra 2 righe con dettagli sui file TempDB e istruzioni T-SQL per spostarli

Dopo aver eseguito le istruzioni mobili, è possibile eseguire nuovamente la query sopra per verificare che la Current Locationcolonna mostri ora la nuovadrive:\folder .

Immagine che mostra le nuove posizioni dei file TempDB

Quando sei soddisfatto delle modifiche, riavvia il servizio SQL Server .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.