O TempDB é compartilhado entre todos os bancos de dados da instância. Portanto, às vezes pode haver contenção no TempDB para determinadas páginas: SGAM , GAM e PFS . Em poucas palavras, essas páginas acompanham o que tem sido usado no TempDB até agora e onde há espaço disponível para novo uso.
Normalmente, isso é resolvido adicionando vários arquivos de dados ao TempDB. Existem algumas filosofias diferentes quanto ao número correto, mas todos concordam que você deve ter mais de um.
Aqui estão algumas consultas para executar ...
Este mostrará quantos arquivos o TempDB possui e onde estão localizados.
-- tempdb layout
use tempdb
go
exec sp_helpfile
go
Este mostrará a você quantas CPUs e núcleos você possui.
-- cores and hyperthreading
select cpu_count, hyperthread_ratio
from sys.dm_os_sys_info
go
Este mostrará quantos nós e núcleos NUMA por nó NUMA você possui.
-- numa nodes and schedulers
select node_id, online_scheduler_count
from sys.dm_os_nodes
order by node_id
go
Este mostrará quais páginas estão com esperas no TempDB.
-- see if anything is waiting on tempdb
select *
from sys.dm_os_waiting_tasks
where resource_description like '2:%'
go
Aqui está um artigo que aborda um pouco mais a fundo a questão da contenção de páginas.
OK, agora a parte da filosofia ... :-)
Para mim, se eu estiver em um sistema SMP , quero apenas tantos arquivos quanto a metade do total de núcleos .
Se eu estiver em um sistema NUMA , desejarei apenas o número de arquivos quantos núcleos por nó NUMA .
No entanto, raramente vejo melhorias por ter mais de quatro arquivos para o TempDB. Por isso, geralmente começo com quatro e monitoro a contenção, conforme explicado no artigo ao qual vinculei.
Se eu continuar tendo problemas, adicionarei mais dois. Verifique novamente, adicione mais e repita até a disputa desaparecer.