TempDB est partagé entre toutes les bases de données de l'instance. Il peut donc parfois y avoir des conflits au sein de TempDB pour certaines pages: SGAM , GAM et PFS . En un mot, ces pages gardent une trace de ce qui a été utilisé dans TempDB jusqu'à présent, et où l'espace est disponible pour une nouvelle utilisation.
En règle générale, cela est traité en ajoutant plusieurs fichiers de données à TempDB. Il existe plusieurs philosophies différentes quant au nombre correct, mais tous conviennent que vous devriez en avoir plusieurs.
Voici quelques requêtes à exécuter ...
Celui-ci vous montrera combien de fichiers TempDB possède et où ils se trouvent.
-- tempdb layout
use tempdb
go
exec sp_helpfile
go
Celui-ci vous montrera combien de processeurs et de cœurs vous avez.
-- cores and hyperthreading
select cpu_count, hyperthread_ratio
from sys.dm_os_sys_info
go
Celui-ci vous montrera combien de nœuds NUMA et de cœurs par nœud NUMA vous avez.
-- numa nodes and schedulers
select node_id, online_scheduler_count
from sys.dm_os_nodes
order by node_id
go
Celui-ci vous montrera quelles pages connaissent des attentes dans TempDB.
-- see if anything is waiting on tempdb
select *
from sys.dm_os_waiting_tasks
where resource_description like '2:%'
go
Voici un article qui approfondit un peu plus le problème de contention des pages.
OK, alors maintenant la partie philosophie ... :-)
Pour moi, si je suis sur un système SMP , je veux seulement autant de fichiers que la moitié du nombre total de cœurs .
Si je suis sur un système NUMA , je veux seulement autant de fichiers que de cœurs par nœud NUMA .
Cependant, je vois rarement une amélioration pour avoir plus de quatre fichiers pour TempDB. Donc, je commence généralement par quatre et surveille les conflits comme expliqué dans l'article auquel j'ai lié.
Si je continue de voir des problèmes, j'en ajouterais deux autres. Vérifiez à nouveau, ajoutez-en plus et répétez jusqu'à ce que le conflit disparaisse.