TempDB se comparte entre todas las bases de datos de la instancia. Por lo tanto, a veces puede haber contención dentro de TempDB para ciertas páginas: SGAM , GAM y PFS . En pocas palabras, estas páginas realizan un seguimiento de lo que se ha utilizado en TempDB hasta ahora y dónde hay espacio disponible para un nuevo uso.
Por lo general, esto se soluciona agregando múltiples archivos de datos a TempDB. Hay algunas filosofías diferentes en cuanto al número correcto, pero todos están de acuerdo en que debe tener más de uno.
Aquí hay algunas consultas para ejecutar ...
Este le mostrará cuántos archivos tiene TempDB y dónde están ubicados.
-- tempdb layout
use tempdb
go
exec sp_helpfile
go
Este le mostrará cuántas CPU y núcleos tiene.
-- cores and hyperthreading
select cpu_count, hyperthread_ratio
from sys.dm_os_sys_info
go
Este le mostrará cuántos nodos y núcleos NUMA por nodo NUMA tiene.
-- numa nodes and schedulers
select node_id, online_scheduler_count
from sys.dm_os_nodes
order by node_id
go
Este le mostrará qué páginas están experimentando esperas en TempDB.
-- see if anything is waiting on tempdb
select *
from sys.dm_os_waiting_tasks
where resource_description like '2:%'
go
Aquí hay un artículo que profundiza un poco más en el tema de contención de la página.
OK, ahora la parte de filosofía ... :-)
Para mí, si estoy en un sistema SMP , solo quiero tantos archivos como la mitad de los núcleos totales .
Si estoy en un sistema NUMA , entonces solo quiero tantos archivos como núcleos por nodo NUMA .
Sin embargo, rara vez veo alguna mejora por tener más de cuatro archivos para TempDB. Por lo general, comienzo con cuatro y superviso la contención como se explica en el artículo al que me vinculé.
Si sigo viendo problemas, entonces agregaría dos más. Verifique nuevamente, agregue más y repita hasta que desaparezca la contención.