TempDB, örnek üzerindeki tüm veritabanları arasında paylaşılır. Bu nedenle, TempDB içinde bazen belirli sayfalar için çekişme olabilir: SGAM , GAM ve PFS . Özetle, bu sayfalar şu ana kadar TempDB'de nelerin kullanıldığını ve yeni kullanım için alanın nerede bulunduğunu takip ediyor.
Tipik olarak, bu, TempDB'ye birden fazla veri dosyası ekleyerek ele alınır. Doğru sayıya ilişkin birkaç farklı felsefe vardır, ancak hepsi birden fazla olması gerektiğini kabul eder.
İşte çalıştırmak için birkaç sorgu ...
Bu, TempDB'de kaç dosya olduğunu ve nerede bulunduğunu gösterecektir.
-- tempdb layout
use tempdb
go
exec sp_helpfile
go
Bu size kaç CPU ve çekirdeğe sahip olduğunuzu gösterecektir.
-- cores and hyperthreading
select cpu_count, hyperthread_ratio
from sys.dm_os_sys_info
go
Bu, NUMA düğümü başına kaç NUMA düğümü ve çekirdeği olduğunu gösterecektir.
-- numa nodes and schedulers
select node_id, online_scheduler_count
from sys.dm_os_nodes
order by node_id
go
Bu, hangi sayfaların TempDB'de beklediğini gösterecektir.
-- see if anything is waiting on tempdb
select *
from sys.dm_os_waiting_tasks
where resource_description like '2:%'
go
İşte sayfa çekişmesi konusunda biraz daha derinlemesine incelenen bir makale .
Tamam, şimdi felsefe kısmı ... :-)
Kendime göre, eğer bir SMP sistemindeysem, toplam çekirdeklerin yarısı kadar dosya istiyorum .
Bir NUMA sistemindeysem, sadece NUMA düğümü başına çekirdek kadar dosya istiyorum .
Ancak, TempDB için dörtten fazla dosyaya sahip olmak için nadiren herhangi bir gelişme görüyorum. Bu yüzden genellikle dört ile başlıyorum ve bağlantılı olduğum makalede açıklandığı gibi çekişmeyi izliyorum.
Sorunları görmeye devam edersem, iki tane daha eklerdim. Tekrar kontrol edin, daha fazlasını ekleyin ve çekişme kaybolana kadar tekrarlayın.