TempDB è condiviso tra tutti i database sull'istanza. Quindi a volte può esserci contesa all'interno di TempDB per alcune pagine: SGAM , GAM e PFS . In breve, queste pagine tengono traccia di ciò che è stato finora utilizzato in TempDB e di dove è disponibile spazio per un nuovo utilizzo.
In genere, ciò viene risolto aggiungendo più file di dati a TempDB. Esistono diverse filosofie sul numero corretto, ma tutti concordano sul fatto che dovresti averne più di una.
Ecco alcune query da eseguire ...
Questo ti mostrerà quanti file ha TempDB e dove si trovano.
-- tempdb layout
use tempdb
go
exec sp_helpfile
go
Questo ti mostrerà quante CPU e core hai.
-- cores and hyperthreading
select cpu_count, hyperthread_ratio
from sys.dm_os_sys_info
go
Questo ti mostrerà quanti nodi e core NUMA per nodo NUMA hai.
-- numa nodes and schedulers
select node_id, online_scheduler_count
from sys.dm_os_nodes
order by node_id
go
Questo ti mostrerà quali pagine stanno vivendo attese in TempDB.
-- see if anything is waiting on tempdb
select *
from sys.dm_os_waiting_tasks
where resource_description like '2:%'
go
Ecco un articolo che approfondisce un po 'il problema della contesa sulla pagina.
OK, quindi ora la parte della filosofia ... :-)
Per quanto mi riguarda, se mi trovo su un sistema SMP , voglio solo un numero di file pari alla metà dei core totali .
Se mi trovo su un sistema NUMA , allora voglio solo tanti file quanti core per nodo NUMA .
Tuttavia, raramente vedo qualche miglioramento per avere più di quattro file per TempDB. Quindi di solito inizio con quattro e controllo la contesa come spiegato nell'articolo a cui mi sono collegato.
Se continuo a riscontrare problemi, ne aggiungerei altri due. Controlla di nuovo, aggiungi altro e ripeti fino a quando la contesa scompare.